Когда я выпускаю новую версию jcabi-aspect , библиотеки Java с открытым исходным кодом, для Maven Central, это занимает 30 секунд моего времени. Может быть, даже меньше. Недавно я выпустил версию 0.17.2. Вы можете увидеть, как все это произошло, в выпуске 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 > < 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 с надлежащим описанием. Во-вторых, он публикует твит о выпуске, который вы можете ретвитить, чтобы сделать объявление своим подписчикам. Обе функции очень удобны для меня. Например:
Похожие сообщения
Вы также можете найти эти сообщения интересными:
- Как выполнить развертывание в CloudBees в один клик
- Скрипт развертывания против Rultor
- Как опубликовать в Rubygems, в один клик
- Рултор + Трэвис
- Каждая сборка в своем собственном Docker-контейнере
Ссылка: | Как выпустить в Maven Central, в один клик от нашего партнера JCG Егора Бугаенко в блоге About Programming . |