Статьи

Как выпустить в Maven Central, в один клик

Когда я выпускаю новую версию jcabi-aspect , библиотеки Java с открытым исходным кодом, для Maven Central, это занимает 30 секунд моего времени. Может быть, даже меньше. Недавно я выпустил версию 0.17.2. Вы можете увидеть, как все это произошло, в выпуске Github № 80 :

GitHub билет-80
Как видите, я дал команду Rultor , и она выпустила новую версию для Maven central. Я больше ничего не делал.

Теперь посмотрим, как вы можете сделать то же самое. Как вы можете настроить свой проект таким образом, чтобы выпуск его новой версии для Maven Central занял всего несколько секунд вашего времени.

Кстати, я предполагаю, что вы размещаете свой проект в Github. Если нет, весь этот учебник не будет работать. Если вы все еще не в Github, я настоятельно рекомендую переехать туда.

Подготовьте свой POM

Убедитесь, что ваш pom.xml содержит все элементы, необходимые для Sonatype, как описано в разделе « Требования к центральной синхронизации» . Мы развернем в Sonatype, и они синхронизируют все артефакты JAR (и не только) с Maven Central.

Зарегистрировать проект с Sonatype

Создайте учетную запись в Sonatype JIRA и поднимите заявку , чтобы подтвердить ваш идентификатор группы. Это руководство OSSRH объясняет этот шаг более подробно.

Создание и распространение ключа GPG

Создайте ключ GPG и распространите его, как описано в этой статье « Работа с сигнатурами PGP» .

Когда этот шаг сделан, у вас должно быть два файла: pubring.gpg и secring.gpg .

Создать settings.xml

Создайте файл settings.xml рядом с двумя файлами .gpg созданными на предыдущем шаге:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<settings>
  <profiles>
    <profile>
      <id>foo</id> <!-- give it the name of your project -->
      <properties>
        <gpg.homedir>/home/r</gpg.homedir>
        <gpg.keyname>9A105525</gpg.keyname>
        <gpg.passphrase>my-secret</gpg.passphrase>
      </properties>
    </profile>
  </profiles>
  <servers>
    <server>
      <id>sonatype</id>
      <username><!-- Sonatype JIRA user name --></username>
      <password><!-- Sonatype JIRA pwd --></password>
    </server>
  </servers>
</settings>

В этом примере 9A105525 — это идентификатор вашего открытого ключа, а my-secret — это пароль, который вы использовали при генерации ключей.

Шифрование активов безопасности

Теперь зашифруйте эти три файла с помощью открытого ключа 9AF0FA4C ( 9AF0FA4C ):

1
2
3
4
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 9AF0FA4C
gpg --trust-model always -a -e -r 9AF0FA4C pubring.gpg
gpg --trust-model always -a -e -r 9AF0FA4C secring.gpg
gpg --trust-model always -a -e -r 9AF0FA4C settings.xml

Вы получите три новых файла: pubring.gpg.asc , secring.gpg.asc и settings.xml.asc . Добавьте их в корневой каталог вашего проекта, подтвердите и нажмите. Файлы содержат вашу секретную информацию, но только сервер Rultor может их расшифровать.

Добавить репозитории Sonatype

Я бы порекомендовал использовать jcabi-parent в качестве родительского pom для вашего проекта. Это сделает ненужными многие дальнейшие шаги. Если вы используете jcabi-parent, пропустите этот шаг.

Однако, если вы не используете jcabi-parent, вы должны добавить эти два репозитория в ваш pom.xml :

01
02
03
04
05
06
07
08
09
10
11
12
13
<project>
  [...]
  <distributionManagement>
    <repository>
      <id>oss.sonatype.org</id>
    </repository>
    <snapshotRepository>
      <id>oss.sonatype.org</id>
    </snapshotRepository>
  </distributionManagement>
</project>

Настройка плагина GPG

Опять же, я бы рекомендовал использовать http://parent.jcabi.com, который автоматически настраивает этот плагин. Если вы используете его, пропустите этот шаг.

В противном случае добавьте этот плагин в ваш pom.xml :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<project>
  [..]
  <build>
    [..]
    <plugins>
      [..]
      <plugin>
        <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>
    </plugins>
  </build>
</project>

Плагин настройки версий

Еще раз, я рекомендую использовать http://parent.jcabi.com. Он настраивает все необходимые плагины из коробки. Если вы используете его, пропустите этот шаг.

В противном случае добавьте этот плагин в ваш pom.xml :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<project>
  [..]
  <build>
    [..]
    <plugins>
      [..]
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <generateBackupPoms>false</generateBackupPoms>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Настроить плагин Sonatype

Да, вы правы, http://parent.jcabi.com поможет вам и здесь. Если вы используете его, пропустите этот шаг тоже.

В противном случае добавьте эти четыре плагина в ваш pom.xml :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<project>
  [..]
  <build>
    [..]
    <plugins>
      [..]
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>package-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
        <executions>
          <execution>
            <id>package-javadoc</id>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.sonatype.plugins</groupId>
        <artifactId>nexus-staging-maven-plugin</artifactId>
        <version>1.6</version>
        <extensions>true</extensions>
        <configuration>
          <serverId>oss.sonatype.org</serverId>
          <nexusUrl>https://oss.sonatype.org/</nexusUrl>
          <description>${project.version}</description>
        </configuration>
        <executions>
          <execution>
            <id>deploy-to-sonatype</id>
            <phase>deploy</phase>
            <goals>
              <goal>deploy</goal>
              <goal>release</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Создать Rultor Config

Создайте файл .rultor.yml в корневом каталоге вашего проекта ( справочная страница подробно объясняет этот формат):

1
2
3
4
5
6
7
8
9
decrypt:
  settings.xml: "repo/settings.xml.asc"
  pubring.gpg: "repo/pubring.gpg.asc"
  secring.gpg: "repo/secring.gpg.asc"
release:
  script: |
    mvn versions:set "-DnewVersion=${tag}"
    git commit -am "${tag}"
    mvn clean deploy --settings /home/r/settings.xml

Вы можете сравнить ваш файл с живой настройкой Jultis-аспектов Rultor .

Запустить его!

логотип
Теперь пришло время посмотреть, как все это работает. Создайте новый тикет в системе отслеживания ошибок Github и опубликуйте в нем что-нибудь подобное (подробнее о командах Rultor ):

1
@rultor release, tag is `0.1`

Вы получите ответ через несколько секунд. Остальное сделает Рултор.

Наслаждайтесь!

Кстати, если что-то не работает, как я объяснил, не стесняйтесь отправить билет в систему отслеживания проблем Rultor . Я постараюсь вам помочь.

Да, забыл упомянуть, Рултор также делает две важные вещи. Во-первых, он создает релиз Github с надлежащим описанием. Во-вторых, он публикует твит о выпуске, который вы можете ретвитить, чтобы сделать объявление своим подписчикам. Обе функции очень удобны для меня. Например:

Похожие сообщения

Вы также можете найти эти сообщения интересными:

Ссылка: Как выпустить в Maven Central, в один клик от нашего партнера JCG Егора Бугаенко в блоге About Programming .