Статьи

Автоматическое продвижение артефактов в Maven Central из Gradle

Краткое руководство по продвижению / выпуску артефактов в проекте Gradle в Maven Central без использования графического интерфейса Nexus с подключаемым модулем Gradle Nexus Staging .

Вступление

Maven Central (aka The Central Repository) — это (вероятно) самый большой в мире набор артефактов с открытым исходным кодом, используемых в проектах на основе Java и JVM. Он был основан создателями Apache Maven и обслуживает артефакты с 2002 года. В настоящее время существуют некоторые альтернативы (перечислены ниже), но для многих пользователей Maven Central по-прежнему является основным источником проектных зависимостей (а иногда и единственным белым списком в списке). корпорации).

проблема

Чтобы выполнить выпуск в центральном репозитории, пользователи Maven могут использовать плагин Nexus Staging Maven — бесплатный, но не полностью с открытым исходным кодом. Но с Gradle требовалось войти в Nexus GUI и вручную вызвать два действия (закрыть репозиторий и выпустить / продвинуть репозиторий). Довольно скучно и, кроме того, очень проблематично с подходом непрерывной доставки. К счастью, Nexus предоставляет REST API, который при некоторой работе позволяет делать то же самое. Постановочный плагин Gradle Nexus возник для этой работы.

Быстрый старт

Важно Обратите внимание, что обязательным условием является наличие активной и настроенной учетной записи в Sonatype OSSRH (хостинг репозитория OSS), а также проекта Gradle, настроенного на публикацию артефактов выпуска в промежуточном хранилище. Если у вас его еще нет, следуйте отдельному разделу Gradle в официальном руководстве .

Чтобы настроить автоматический выпуск / продвижение в вашем проекте, добавьте gradle-nexus-staging-plugin к зависимостям buildscript в файле build.gradle для корневого проекта:

1
2
3
4
5
6
7
8
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.5.1"
    }
}

Примените плагин:

1
apply plugin: 'io.codearte.nexus-staging'

Настройте это:

1
2
3
4
nexusStaging {
    packageGroup = "org.mycompany.myproject"
    stagingProfileId = "yourStagingProfileId" //when not defined will be got from server using "packageGroup"
}

После успешной загрузки архивов (с плагином maven , maven-publish или nexus ) на вызов Sonatype OSSRH:

1
./gradlew closeRepository promoteRepository

закрыть промежуточное хранилище и продвигать / выпускать его и его артефакты. Если включена синхронизация с Maven Central, артефакты должны автоматически появиться в Maven Central через несколько минут.

подробности

Плагин предоставляет две основные задачи:

  • closeRepository — закрывает открытый репозиторий с загруженными артефактами. В промежуточном профиле должен быть доступен только один открытый репозиторий (возможные старые / сломанные репозитории можно удалить с помощью Nexus GUI)
  • promoteRepository — продвигает / выпускает закрытое хранилище (требуется для помещения артефактов в Maven Central)

И еще одно:

  • getStagingProfile — получает и отображает идентификатор промежуточного профиля для данной группы пакетов. Это диагностическая задача, чтобы получить значение и поместить его в закрытие конфигурации как stagingProfileId . Чтобы увидеть результат, необходимо вызвать gradle с --info .

Следует отметить, что вызов Nexus REST API завершается немедленно, но операция закрытия занимает мгновение, поэтому для возможности совместного вызова closeRepository promoteRepository существует встроенный механизм closeRepository promoteRepository попыток.

Плагин является «независимым от механизма загрузки» и может использоваться вместе с плагинами maven , maven-plugin или nexus .

Для получения дополнительной информации и параметров конфигурации см. Веб-страницу проекта или рабочий пример в собственной конфигурации выпуска плагина.

Альтернативы Maven Central?

Гораздо более молодая, но многообещающая альтернатива — Bintray, которая также позволяет обслуживать артефакты. Это бесплатно для проектов с открытым исходным кодом, и я лично использовал его для некоторых других проектов и даже создал механизм автоматического выпуска для Bintray, Travis и Gradle. Это работает нормально, но для помещения артефактов также в Maven Central необходимо хранить закрытый ключ, используемый для пения, на своих серверах и, кроме того, предоставлять учетные данные Nexus. Это увеличивает риск их кражи, и в Codearte мы предпочитаем использовать частный экземпляр Jenkins для выполнения выпуска непосредственно в Maven Central.

Резюме

С плагином Gradle Nexus Staging весь процесс выпуска в Maven Central может быть выполнен с помощью Gradle из командной строки, а некоторые дополнительные операции выполняются полностью автоматически с сервера CI. Больше нет кнопок для нажатия в Nexus GUI. В дополнение к Sonatype OSSRH плагин может также использоваться с частными экземплярами Nexus с включенными промежуточными хранилищами.

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

Спасибо Kuba Kubryński за мотивацию и помощь в анализе не очень хорошо документированного Nexus REST API.

Ссылка: Автоматическое продвижение артефактов в Maven Central от Gradle от нашего партнера по JCG Марцина Заячковского в блоге Solid Soft .