Яма, обнаруженная при публикации артефактов в центральном репозитории Maven

maven

Как Java Developer (Pseudo), работа не должна быть отделена от Maven. Иногда нужно опубликовать свои собственные компоненты в центральный репозиторий Maven (oss.sonatype.org/). 但是经常有这样那样的坑(因为总是换电脑 XD),在这里记录一下,以备后续查阅。

Maven Logo

Шаги загрузки

Общие шаги для публикации проекта в центральном репозитории maven следующие:

  1. Зарегистрируйте учетную запись в Sonatype. адрес:вопросов.так что type.org/secure/sign…

  2. Отправьте запрос на освобождение. (только первый раз)

    • Создайте проблему:вопросы.так что type.org/secure/CR EA…
    • Тип проектаCommunity Support - Open Source Project Repository Hosting
    • groupIdВы должны владеть соответствующим доменным именем
  3. Сгенерируйте пару ключей с помощью GPG.

    Установка Windows:gpg4win.org/

    Установка Mac:brew install gpg

    • gpg --versionПроверьте, прошла ли установка успешно
    • gpg --gen-keyСоздать пару ключей
    • gpg --list-keysПосмотреть открытый ключ
    • gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥IDОпубликуйте открытый ключ на сервере ключей PGP.
    • gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公钥IDЗапросить, успешно ли выпущен открытый ключ
  4. Настройте мавен. Файлы конфигурации Maven, которые необходимо изменить, включают:setting.xml(глобальный уровень) сpom.xml(уровень проекта).

    • setting.xmlОбзор конфигурации

      <settings>
      
          ...
      
          <servers>
              <server>
                  <id>snapshotRepository-id</id>
                  <username>用户名</username>
                  <password>密码</password>
              </server>
          </servers>
      
          ...
      
      </settings>
      
      

      Используйте имя пользователя и пароль зарегистрированной учетной записи Sonatype для настройки указанной выше информации о сервере.

      я здесьsnapshotRepository-idдолжно быть таким же, как следующееpom.xmlСнапшотрепозиторий и идентификатор в репозитории согласованы.

      • pom.xmlОбзор конфигурации
      <project>
      
          ...
      
          <name>your project's name</name>
          <description>your project's description</description>
          <url>http://www.chengww.com/</url>
      
          <licenses>
              <license>
                  <name>The Apache Software License, Version 2.0</name>
                  <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
              </license>
          </licenses>
      
          <developers>
              <developer>
                  <name>chengww</name>
                  <email>chengww5217@163.com</email>
              </developer>
          </developers>
      
          ...
      
          <profiles>
              <profile>
                  <id>release</id>
                  <build>
                      <plugins>
                          <!-- Source -->
                          <plugin>
                              <groupId>org.apache.maven.plugins</groupId>
                              <artifactId>maven-source-plugin</artifactId>
                              <version>2.2.1</version>
                              <executions>
                                  <execution>
                                      <phase>package</phase>
                                      <goals>
                                          <goal>jar-no-fork</goal>
                                      </goals>
                                  </execution>
                              </executions>
                          </plugin>
                          <!-- Javadoc -->
                          <plugin>
                              <groupId>org.apache.maven.plugins</groupId>
                              <artifactId>maven-javadoc-plugin</artifactId>
                              <version>2.9.1</version>
                              <executions>
                                  <execution>
                                      <phase>package</phase>
                                      <goals>
                                          <goal>jar</goal>
                                      </goals>
                                  </execution>
                              </executions>
                          </plugin>
                          <!-- GPG -->
                          <plugin>
                              <groupId>org.apache.maven.plugins</groupId>
                              <artifactId>maven-gpg-plugin</artifactId>
                              <version>1.5</version>
                              <executions>
                                  <execution>
                                      <phase>verify</phase>
                                      <goals>
                                          <goal>sign</goal>
                                      </goals>
                                  </execution>
                              </executions>
                          </plugin>
                      </plugins>
                  </build>
                  <distributionManagement>
                      <snapshotRepository>
                          <id>snapshotRepository-id</id>
                          			<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
                      </snapshotRepository>
                      <repository>
                          <id>snapshotRepository-id</id>
                          <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                      </repository>
                  </distributionManagement>
              </profile>
          </profiles>
      
          ...
      
          </project>
      

      Примечание: вышеpom.xmlДолжен включать: имя, описание, URL, лицензии, разработчиков, scm и другую базовую информацию, кроме того, используя функцию профиля Maven, только при выпуске, создать исходный пакет, создать пакет документов и использовать GPG для цифровых подписей. Кроме того, идентификатор в snapshotRepository и репозитории должен быть таким же, какsetting.xmlИдентификатор сервера тот же.

  5. Загрузить компоненты в OSS.mvn clean deploy -P release

  6. Публикация артефактов в OSS. Войтиoss.sonatype.org/, нажмитеStaging Repositories-> Введите свой groupId в строку поиска -> проверьте свой виджет и нажмите «Закрыть» -> нажмите «Отпустить» на панели вкладок.

  7. Сообщите сотрудникам Sonatype, чтобы закрыть вопрос. (только первый раз)

Справочный адрес:OSCHINA.net/Huang Yong/No…


Дождавшись одобрения, вы можете самостоятельно искать компоненты, выпущенные на центральном складе!

Однако все не так просто. Всегда есть такие ямы.

Список обнаруженных ям

Пара ключей, сгенерированная GPG

искаженное сообщение

Этот шаг фактически является шагом ввода пароля. Но поскольку это китайский язык, подсказка сообщения искажена.

Просто введите пароль в горизонтальную строку ниже, переместите курсор в нижнюю строку и нажмите Enter. Обратите внимание, что пароль нужно вводить дважды, пожалуйста, соблюдайте их согласованность.

Опубликуйте открытый ключ на сервере ключей PGP.

gpg: ошибка отправки на сервер ключей: сервер указал на сбой

Поскольку установлена ​​более новая версия gpg,gpg --list-keysотображается следующим образом:

pub   rsa2048 2019-04-12 [SC] [有效至:2021-04-11]
      9A1640F7A2551131612D51B12D83594B7B29D86A
uid           [ 绝对 ] chengww <chengww5217@163.com>
sub   rsa2048 2019-04-12 [E] [有效至:2021-04-11]

При публикации открытого ключа на сервере заполняется идентификатор открытого ключа.9A1640F7A2551131612D51B12D83594B7B29D86A, отображаемый на терминале как:

gpg --keyserver hkp://subkeys.pgp.net --send-keys 9A1640F7A2551131612D51B12D83594B7B29D86A
...
gpg: 正在发送密钥 2D83594B7B29D86A 到 hkp://subkeys.pgp.net
gpg: 发送至公钥服务器失败:Server indicated a failure
gpg: 发送至公钥服务器失败:Server indicated a failure

Просто измените идентификатор открытого ключа с9A1640F7A2551131612D51B12D83594B7B29D86Aизменился на2D83594B7B29D86AТолько что:

gpg --keyserver hkp://subkeys.pgp.net --send-keys 2D83594B7B29D86A

настроить maven

Где настроен глобальный уровень settings.xml

settings.xmlФайлы обычно находятся в двух местах: Глобальная конфигурация:${M2_HOME}/conf/settings.xmlКонфигурация пользователя:${user.home}/.m2/settings.xml

Если вы не уверены, пожалуйстаmvn -XПроверить:

...
[DEBUG] Reading global settings from /usr/local/Cellar/maven/3.6.0/libexec/conf/settings.xml
[DEBUG] Reading user settings from /Users/chengww/.m2/settings.xml
...

оsetting.xmlДля соответствующих пояснений см.:woo woo Краткое описание.com/afraid/110's 897 ah 5…

Загрузить артефакты в OSS

Maven Sonatype Nexus return 401

401 ошибка, как правило, не вsetting.xmlИмя пользователя и пароль установлены (или имя пользователя и пароль неверны).

см. выше4. Настройте мавенв конфигурацииsetting.xml.

gpg: signing failed: Inappropriate ioctl for device

Причина в том, что новая версия gpg не может открыть страницу ввода пароля в текущем терминале.

решить:

export GPG_TTY=$(tty)

экспортировать в текущий терминал (временный обходной путь)

или добавить в~/.bash_profile,Потомsource ~/.bash_profile

gpg: signing failed: Screen or window too small

После выполнения вышеуказанной команды интерфейс ввода пароля по-прежнему не появляется в Терминале в IntelliJ IDEA, и сообщается об указанной выше ошибке.

В это время перейдите в терминал системы, перейдите в каталог проекта, а затем выполнитеmvn clean deploy -P release

заключительные замечания

Впереди долгий путь, и я надеюсь, что багов в мире не будет.