Spec-Zone.ru › Kotlin 2

Публикация библиотеки в Maven Central — руководство

В этом руководстве вы узнаете, как опубликовать библиотеку Kotlin Multiplatform в репозитории Maven Central.

Чтобы опубликовать библиотеку, вам потребуется:

  1. Настроить учетные данные, включая учетную запись Maven Central и ключ PGP для подписи.

  2. Настроить плагин публикации в проекте библиотеки.

  3. Передать учетные данные плагину публикации, чтобы он мог подписывать и загружать артефакты.

  4. Запустить задачу публикации — локально или с помощью непрерывной интеграции.

В этом руководстве предполагается, что вы:

  • Создаете библиотеку с открытым исходным кодом.

  • Храните код библиотеки в репозитории GitHub.

  • Используете macOS или Linux. Если вы работаете в Windows, воспользуйтесь GnuPG или Gpg4win для создания пары ключей.

  • Еще не зарегистрированы в Maven Central или имеете существующую учетную запись, подходящую для публикации на Central Portal (созданную после 12 марта 2024 года или перенесенную на Central Portal службой поддержки).

  • Используете GitHub Actions для непрерывной интеграции.

Большинство приведенных здесь шагов подходят и для других конфигураций, но вам, возможно, придется учесть некоторые отличия.

Важное ограничение: для сборки целевых платформ Apple требуется компьютер с macOS.

Пример библиотеки

В этом руководстве в качестве примера используется библиотека fibonacci. Обратитесь к коду этого репозитория, чтобы посмотреть, как настроена публикация.

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

Подготовьте учетные записи и учетные данные

Чтобы начать публикацию в Maven Central, войдите в портал Maven Central (или создайте новую учетную запись).

Выберите и подтвердите пространство имен

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

Артефакты Maven идентифицируются по координатам, например, com.example:fibonacci-library:1.0.0. Эти координаты состоят из трех частей, разделенных двоеточиями:

  • groupId в обратной DNS-форме, например, com.example

  • artifactId: уникальное имя самой библиотеки, например, fibonacci-library

  • version: строка версии, например, 1.0.0. Версия может быть любой строкой, но не может заканчиваться на -SNAPSHOT

Зарегистрированное пространство имен позволяет задать формат groupId в Maven Central. Например, если вы зарегистрируете пространство имен com.example, можно будет публиковать артефакты со значением com.example, com.example.libraryname, com.example.module.feature и так далее для groupId.

Войдя в Maven Central, перейдите на страницу Namespaces. Затем нажмите кнопку Add Namespace и зарегистрируйте пространство имен:

Создание пространства имен с помощью учетной записи GitHub — хороший вариант, если у вас нет собственного доменного имени:

  1. Укажите io.github.<your username> в качестве пространства имен, например, io.github.kotlinhandson, и нажмите Submit.

  2. Скопируйте Verification Key, отображаемый под созданным пространством имен.

  3. Войдите в GitHub под использованным именем пользователя и создайте новый общедоступный репозиторий, назвав его ключом подтверждения, например, http://github.com/kotlin-hands-on/ex4mpl3c0d.

  4. Вернитесь в Maven Central и нажмите кнопку Verify Namespace. После успешного подтверждения созданный репозиторий можно удалить.

Чтобы использовать принадлежащее вам доменное имя в качестве пространства имен:

  1. Укажите свой домен в качестве пространства имен в обратной DNS-форме. Если ваш домен — example.com, укажите com.example.

  2. Скопируйте отображаемый Verification Key.

  3. Создайте новую TXT-запись DNS, указав в ее содержимом ключ подтверждения.

    Подробнее о том, как это сделать у разных регистраторов доменов, см. в разделе часто задаваемых вопросов Maven Central.

  4. Вернитесь в Maven Central и нажмите кнопку Verify Namespace. После успешного подтверждения созданную TXT-запись можно удалить.

Создайте пару ключей

Прежде чем публиковать что-либо в Maven Central, необходимо подписать артефакты с помощью подписи PGP, которая позволяет пользователям проверить происхождение артефактов.

Чтобы настроить подпись, сначала создайте пару ключей:

  • Закрытый ключ используется для подписи артефактов, и его нельзя никому передавать.

  • Открытым ключом можно поделиться, чтобы другие могли проверять подпись ваших артефактов.

В плагине Kotlin Gradle есть задача Gradle, с помощью которой можно создать пару ключей.

  1. Создайте пару ключей с помощью следующей команды. Введите пароль для закрытого хранилища ключей и свое имя в указанном формате:

    ./gradlew -Psigning.password=example-password generatePgpKeys --name "John Smith <john@example.com>"
    

    Пара ключей хранится в каталоге build/pgp.

  2. Переместите пару ключей из каталога build/pgp в безопасное место, чтобы предотвратить случайное удаление или несанкционированный доступ.

Инструмент gpg для управления подписями доступен на сайте GnuPG. Его также можно установить с помощью менеджеров пакетов, например Homebrew:

brew install gpg
  1. Запустите создание пары ключей следующей командой и введите запрошенные данные:

    gpg --full-generate-key
    
  2. Выберите рекомендуемые параметры по умолчанию для типа создаваемого ключа. Можно оставить поля пустыми и нажать Enter, чтобы принять значения по умолчанию.

    Please select what kind of key you want:
        (1) RSA and RSA
        (2) DSA and Elgamal
        (3) DSA (sign only)
        (4) RSA (sign only)
        (9) ECC (sign and encrypt) *default*
        (10) ECC (sign only)
        (14) Existing key from card
    Your selection? 9
    
    Please select which elliptic curve you want:
        (1) Curve 25519 *default*
        (4) NIST P-384
        (6) Brainpool P-256
    Your selection? 1
    

    На момент написания этого руководства используется ECC (sign and encrypt) с Curve 25519. В более старых версиях gpg по умолчанию мог использоваться RSA с размером ключа 3072 бит.

  3. При запросе срока действия ключа можно выбрать вариант по умолчанию — без даты истечения срока действия.

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

    Please specify how long the key should be valid.
        0 = key does not expire
        <n>  = key expires in n days
        <n>w = key expires in n weeks
        <n>m = key expires in n months
        <n>y = key expires in n years
    Key is valid for? (0) 0
    Key does not expire at all
    
    Is this correct? (y/N) y
    
  4. Введите имя, адрес электронной почты и необязательный комментарий, чтобы связать ключ с учетной записью (поле комментария можно оставить пустым):

    GnuPG needs to construct a user ID to identify your key.
    
    Real name: Jane Doe
    Email address: janedoe@example.com
    Comment:
    You selected this USER-ID:
        "Jane Doe <janedoe@example.com>"
    
  5. Введите парольную фразу для шифрования ключа и повторите ее, когда появится запрос.

    Храните парольную фразу в надежном и недоступном для других месте. Позже она понадобится для доступа к закрытому ключу при подписании артефактов.

  6. Посмотрите сведения о созданном ключе с помощью следующей команды:

    gpg --list-keys
    

    Вывод будет выглядеть примерно так:

    pub   ed25519 2024-10-06 [SC]
          F175482952A225BFD4A07A713EE6B5F76620B385CE
    uid   [ultimate] Jane Doe <janedoe@example.com>
          sub   cv25519 2024-10-06 [E]
    

    На следующих шагах вам понадобится длинный буквенно-цифровой идентификатор ключа, отображаемый в выводе.

Загрузите открытый ключ

Чтобы Maven Central принял открытый ключ, необходимо загрузить его на сервер ключей. Доступно несколько серверов; для примера воспользуемся keyserver.ubuntu.com.

В плагине Kotlin Gradle есть задача Gradle, с помощью которой можно загрузить открытый ключ.

Чтобы загрузить открытый ключ, выполните следующую команду, указав путь к нему:

./gradlew uploadPublicPgpKey --keyring /path_to/build/pgp/public_KEY_ID.asc

Чтобы Maven Central принял открытый ключ, необходимо загрузить его на сервер ключей. Доступно несколько серверов; для примера воспользуемся keyserver.ubuntu.com.

Чтобы загрузить открытый ключ с помощью gpg, выполните следующую команду, указав в параметрах собственный идентификатор ключа:

gpg --keyserver keyserver.ubuntu.com --send-keys F175482952A225BFC4A07A715EE6B5F76620B385CE

Экспортируйте закрытый ключ

Чтобы проект Gradle мог получить доступ к закрытому ключу, экспортируйте его в файл. Вам будет предложено ввести парольную фразу, заданную при создании ключа.

Выполните следующую команду, указав в качестве параметра собственный идентификатор ключа:

gpg --armor --export-secret-keys F175482952A225BFC4A07A715EE6B5F76620B385CE > key.gpg

Эта команда создаст текстовый файл key.gpg, содержащий ваш закрытый ключ.

Никогда и никому не передавайте файл с закрытым ключом — доступ к нему должен быть только у вас, так как закрытый ключ позволяет подписывать файлы с использованием ваших учетных данных.

Настройте проект

Подготовьте проект библиотеки

Если вы начали разработку библиотеки на основе шаблонного проекта, сейчас самое время заменить заданные по умолчанию названия на название вашей библиотеки. Это касается названия модуля библиотеки и названия корневого проекта в файле build.gradle.kts верхнего уровня.

Если в проекте есть целевая платформа Android, выполните шаги по подготовке выпуска библиотеки Android. Как минимум, необходимо указать подходящее пространство имен для библиотеки, чтобы при компиляции ресурсов был создан уникальный класс R. Обратите внимание: это пространство имен отличается от пространства имен Maven, созданного ранее.

// build.gradle.kts

android {
    namespace = "io.github.kotlinhandson.fibonacci"
}

Настройте плагин публикации

В этом руководстве для публикации в Maven Central используется vanniktech/gradle-maven-publish-plugin. Подробнее о преимуществах плагина можно прочитать здесь. Обратитесь к документации плагина, чтобы узнать больше о его использовании и доступных параметрах настройки.

Чтобы добавить плагин в проект, добавьте следующую строку в блок plugins {} файла build.gradle.kts модуля библиотеки:

// <module directory>/build.gradle.kts

plugins {
    id("com.vanniktech.maven.publish") version "0.37.0" 
}

Последнюю доступную версию плагина можно найти на его странице релизов.

В том же файле добавьте следующую конфигурацию, заменив все значения на подходящие для вашей библиотеки:

// <module directory>/build.gradle.kts

mavenPublishing {
    publishToMavenCentral()
    
    signAllPublications()
    
    coordinates(group.toString(), "fibonacci", version.toString())
    
    pom { 
        name = "Fibonacci library"
        description = "A mathematics calculation library."
        inceptionYear = "2024"
        url = "https://github.com/kotlin-hands-on/fibonacci/"
        licenses {
            license {
                name = "The Apache License, Version 2.0"
                url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
                distribution = "https://www.apache.org/licenses/LICENSE-2.0.txt"
            }
        }
        developers {
            developer {
                id = "kotlin-hands-on"
                name = "Kotlin Developer Advocate"
                url = "https://github.com/kotlin-hands-on/"
            }
        }
        scm {
            url = "https://github.com/kotlin-hands-on/fibonacci/"
            connection = "scm:git:git://github.com/kotlin-hands-on/fibonacci.git"
            developerConnection = "scm:git:ssh://git@github.com/kotlin-hands-on/fibonacci.git"
        }
    }
}

Для настройки также можно использовать свойства Gradle.

Наиболее важные параметры:

  • coordinates, задающие groupId, artifactId и version вашей библиотеки.

  • Лицензия, на условиях которой публикуется библиотека.

  • Сведения о разработчиках, содержащие список авторов библиотеки.

  • Сведения о SCM (управлении исходным кодом), указывающие, где размещен исходный код библиотеки.

Выполните локальные проверки

Перед публикацией в Maven Central рекомендуется локально проверить правильность конфигурации проекта.

Проверьте подпись локально

Убедитесь, что ключи правильно настроены для подписания, выполнив следующую команду:

./gradlew checkSigningConfiguration

Эта задача Gradle проверяет, загружен ли ваш открытый ключ на один из серверов ключей — keyserver.ubuntu.com или keys.openpgp.org.

Если задача сообщает об ошибке, изучите вывод, чтобы узнать, как ее исправить.

Локально проверьте файл pom.xml

Чтобы опубликовать библиотеку в Maven Central, файл pom.xml должен соответствовать требованиям Maven Central.

Для каждой библиотеки, которую вы планируете опубликовать, выполните следующую команду, заменив <PUBLICATION_NAME> на имя публикации:

./gradlew checkPomFileFor<PUBLICATION_NAME>Publication

При использовании vanniktech/gradle-maven-publish-plugin публикация обычно называется Maven. В этом случае задача будет выглядеть так:

./gradlew checkPomFileForMavenPublication

Если задача сообщает об ошибке, изучите вывод, чтобы узнать, как ее исправить.

Публикуйте в Maven Central с помощью непрерывной интеграции

Создайте токен пользователя

Для авторизации запросов на публикацию в Maven Central вам понадобится токен доступа Maven. Откройте страницу Setup Token-Based Authentication и нажмите кнопку Generate User Token.

В результате вы получите данные, как в примере ниже: имя пользователя и пароль. Если вы потеряете эти учетные данные, их придется создать заново, так как Maven Central их не хранит.

<server>
    <id>${server}</id>
    <username>l2nfaPmz</username>
    <password>gh9jT9XfnGtUngWTZwTu/8141keYdmQpipqLPRKeDLTh</password>
</server>

Добавьте секреты в GitHub

Чтобы использовать ключи и учетные данные, необходимые для публикации в рабочем процессе GitHub Action, и при этом сохранить их конфиденциальность, сохраните эти значения в качестве секретов.

  1. На странице Settings репозитория GitHub нажмите Security | Secrets and variables | Actions.

  2. Нажмите кнопку New repository secret и добавьте следующие секреты:

    • MAVEN_CENTRAL_USERNAME и MAVEN_CENTRAL_PASSWORD — это значения токена пользователя, созданные на сайте Central Portal.

    • SIGNING_KEY_ID — это последние 8 символов идентификатора ключа подписи, например, 20B385CE для F175482952A225BFC4A07A715EE6B5F76620B385CE.

    • SIGNING_PASSWORD — это парольная фраза, заданная при создании ключа GPG.

    • GPG_KEY_CONTENTS должен содержать все содержимое файла key.gpg.

    Add secrets to GitHub

На следующем шаге вы укажете имена этих секретов в конфигурации CI.

Добавьте рабочий процесс GitHub Actions в проект

Вы можете настроить непрерывную интеграцию для автоматической сборки и публикации библиотеки. В качестве примера мы воспользуемся GitHub Actions.

Для начала добавьте в репозиторий следующий рабочий процесс в файле .github/workflows/publish.yml:

# .github/workflows/publish.yml

name: Publish
on:
  release:
    types: [released, prereleased]
jobs:
  publish:
    name: Release build and publish
    runs-on: macOS-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v4
      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: 21
      - name: Publish to MavenCentral
        run: ./gradlew publishToMavenCentral --no-configuration-cache
        env:
          ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
          ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
          ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }}
          ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
          ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY_CONTENTS }}

После фиксации и отправки этого файла рабочий процесс будет запускаться автоматически при создании релиза (включая предварительный релиз) в репозитории GitHub, где размещен проект. Рабочий процесс получает текущую версию кода, настраивает JDK, а затем запускает задачу Gradle publishToMavenCentral.

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

Вы также можете настроить рабочий процесс на запуск при отправке тега в репозиторий.

Приведенный выше скрипт отключает кэш конфигурации Gradle для задачи публикации, добавляя --no-configuration-cache в команду Gradle, поскольку плагин публикации его не поддерживает (см. открытую проблему).

Для этого действия необходимы данные для подписи и учетные данные Maven Central, которые вы создали в качестве секретов репозитория.

Конфигурация рабочего процесса автоматически передает эти секреты в переменные среды, делая их доступными процессу сборки Gradle.

Создайте релиз на GitHub

Настроив рабочий процесс и секреты, вы готовы создать релиз, который запустит публикацию библиотеки.

  1. Убедитесь, что в файле build.gradle.kts вашей библиотеки указана версия, которую вы хотите опубликовать.

  2. Перейдите на главную страницу репозитория GitHub.

  3. На боковой панели справа нажмите Releases.

  4. Нажмите кнопку Draft a new release (или Create a new release, если вы еще не создавали релизы для этого репозитория).

  5. Каждому релизу соответствует тег. Создайте новый тег в раскрывающемся списке тегов и задайте название релиза (имя тега и название могут совпадать).

    Скорее всего, они должны совпадать с номером версии библиотеки, указанным в файле build.gradle.kts.

    Create a release on GitHub
  6. Еще раз проверьте ветку, для которой создается релиз (особенно если это не ветка по умолчанию), и добавьте подходящие примечания к выпуску новой версии.

  7. Установите флажки под описанием, чтобы отметить релиз как предварительный (это удобно для предварительных версий, таких как alpha, beta или RC).

    Также можно отметить релиз как последний, если для этого репозитория уже создавались релизы.

  8. Нажмите кнопку Publish release, чтобы создать новый релиз.

  9. В верхней части страницы репозитория GitHub нажмите вкладку Actions. Здесь вы увидите, что новый релиз запустил рабочий процесс публикации.

    Нажмите на рабочий процесс, чтобы просмотреть результаты задачи публикации.

  10. После завершения рабочего процесса перейдите на панель управления Deployments в Maven Central. Здесь должно появиться новое развертывание.

    Пока Maven Central выполняет проверки, развертывание может некоторое время оставаться в состояниях pending или validating.

  11. Когда развертывание перейдет в состояние validated, проверьте, что оно содержит все загруженные артефакты. Если все в порядке, нажмите кнопку Publish, чтобы выпустить эти артефакты.

    Publishing settings

    После выпуска артефакты станут общедоступны в репозитории Maven Central не сразу: обычно это занимает около 15–30 минут, но иногда может занять несколько часов. Индексация артефактов и их появление в результатах поиска на сайте Maven Central могут занять больше времени.

Чтобы автоматически выпускать артефакты после проверки развертывания, замените задачу publishToMavenCentral в рабочем процессе на publishAndReleaseToMavenCentral.

Что дальше

  • Подробнее о настройке публикации мультиплатформенной библиотеки и требованиях

  • Добавьте бейджи shield.io в файл README

  • Поделитесь документацией API своего проекта с помощью Dokka

  • Добавьте Renovate для автоматического обновления зависимостей

  • Продвигайте свою библиотеку на поисковой платформе JetBrains

  • Расскажите о своей библиотеке сообществу в канале Kotlin Slack #feed (чтобы зарегистрироваться, посетите https://kotl.in/slack)

01 апреля 2026
Настройка публикации мультиплатформенной библиотекиПубликация библиотеки в npm — руководство

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/multiplatform-publish-libraries-to-maven.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API