Как вручную публиковать JAR для maven central?
Я создал проект с открытым исходным кодом, который я бы хотел опубликовать в maven central, чтобы пользователи могли использовать библиотеку, просто ссылаясь это в их пом. Например:
<dependency>
<groupId>in.ksharma</groupId>
<artifactId>log4j-weblayout</artifactId>
<version>0.0.1-BETA</version>
</dependency>
Я нашел несколько онлайн-руководств, но некоторые из них устарели, некоторые рекомендуют автоматизировать весь процесс и тем самым открыто усложнять его.
Например, один учебник рекомендовал создавать ключи SSH для вашей учетной записи github и иметь maven автоматически создавать тег git при каждом нажатии на maven central. Хотя это полезно, нет необходимости начинать.
Другой пример: попытка выпустить его непосредственно через maven также дает некоторую ошибку:
mvn release:clean release:prepare release:perform -B -e | tee maven-central-deploy.log
дает:
svn: E155007: '/home/kshitiz/Documents/workspaces/ggts/log4j-weblayout/pom.xml' является не рабочая копия
Когда вы делаете что-то в первый раз, это часто помогает сделать это вручную, а затем автоматизировать его.
Каков самый простой, простой способ разместить JAR в центре maven?
Ответы
Ответ 1
В этом ответе предполагается, что у вас есть проект на основе maven и он находится в состоянии пакета. mvn package
должен работать без ошибок.
При публикации в maven central вам нужно будет использовать идентификатор группы, который идентифицирует все загруженные вами артефакты. Что-то вроде in.ksharma
. Вам также нужно будет подписать свои артефакты, чтобы пользователи могли убедиться, что они действительно исходят от вас.
Поэтому сначала зайдите в sonatype jira и создайте учетную запись, а затем создайте проблему jira, чтобы подтвердить свой идентификатор группы. Что - то вроде этого.
Теперь сгенерируйте пару ключей gpg для подписи ваших артефактов:
$ gpg --gen-key
Определите этот ключ в ~/.m2/settings.xml
:
<profiles>
<profile>
<id>sonatype-oss-release</id>
<properties>
<gpg.keyname>B63EFB4D</gpg.keyname>
<gpg.passphrase>****</gpg.passphrase>
<gpg.defaultKeyring>true</gpg.defaultKeyring>
<gpg.useagent>true</gpg.useagent>
<gpg.lockMode>never</gpg.lockMode>
<gpg.homedir>/home/kshitiz/.gnupg</gpg.homedir>
</properties>
</profile>
</profiles>
Измените файл pom проекта и добавьте -SNAPSHOT
к вашей версии. Таким образом, 0.0.1-BETA
становится 0.0.1-BETA-SNAPSHOT
. В противном случае Maven будет жаловаться:
[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-release-plugin: 2.4.2: подготовить (default-cli) для проекта log4j-weblayout: у вас нет проекта SNAPSHOT в списке проектов реактора, → [Помощь 1]
Также добавьте:
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>9</version>
</parent>
Этот родительский pom предоставляет вам некоторые готовые функции, такие как настройка maven-gpg-plugin
для подписи вашего JAR.
Теперь запустите mvn release:clean release:prepare
к созданию ваших артефактов и подписи gpg. Это даст вам что-то вроде:
log4j-weblayout-0.0.1-BETA-javadoc.jar.asc
log4j-weblayout-0.0.1-BETA-sources.jar.asc
log4j-weblayout-0.0.1-BETA.pom.asc
log4j-weblayout-0.0.1-BETA.pom
log4j-weblayout-0.0.1-BETA.jar.asc
log4j-weblayout-0.0.1-BETA-javadoc.jar
log4j-weblayout-0.0.1-BETA-sources.jar
log4j-weblayout-0.0.1-BETA.jar
Теперь упакуйте их в один JAR:
jar -cvf bundle.jar log4j-weblayout-0.0.1-BETA*
Перейдите к Sonatype Nexus и войдите с вашими учетными данными. Перейдите к промежуточной загрузке и загрузите свой пакет.
![enter image description here]()
Затем перейдите в раздел " Постановка репозиториев ", выберите свой репозиторий и нажмите "Release" (дополнительная справка здесь). Прокомментируйте проблему jira, в которой вы выпустили артефакт, и подождите некоторое время.
Теперь ваши пользователи могут искать и использовать артефакт из центрального хранилища: ![enter image description here]()
Ответ 2
1) Создайте свою учетную запись Jira: Регистрация соната
2) Создайте новый проектный билет (чтобы требовать свое рабочее пространство): Создать новый проектный билет
3) Создать подпись PGP
gpg2 --gen-key
....
gpg: key YOUR_KEY_ID marked as ultimately trusted
...
4) Распространение открытого ключа
gpg2 --keyserver hkp://pool.sks-keyservers.net --send-keys YOUR_KEY_ID
Распределите свой ключ на нескольких серверах, чтобы ускорить процесс синхронизации (pgp.mit.edu, keyserver.ubuntu.com...)
5) Обновите свой файл ~.m2/settings.xml
<settings>
<servers>
<server>
<id>ossrh</id>
<username>jira_username</username>
<password>jira_password</password>
</server>
</servers>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>your_key_passphrase</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>
6) Обновите проект pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>9</version>
</parent>
<groupId>xxx.xxx</groupId>
<artifactId>xxx</artifactId>
<version>0.1</version>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
</project>
7) Выполнить Maven
Maven запросит у вас парольную фразу
mvn clean deploy
8) Прокомментируйте свой билет на Джиру
Это приведет к синхронизации с центральным для вашего идентификатора группы.
Я продвинул свой первый выпуск. Спасибо.
Ресурсы:
Руководство OSSRH
Развертывание с Maven
Подписи PGP