Как вручную публиковать 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