Skip to main content

Публикация пакетов Java с помощью Maven

С помощью Maven можно опубликовать пакеты Java в реестре в рамках рабочего процесса непрерывной интеграции (CI).

Введение

В этом руководстве показано, как создать рабочий процесс, который публикует пакеты Java в GitHub Packages и центральном репозитории Maven. С помощью одного рабочего процесса можно публиковать пакеты в одном репозитории или в нескольких.

Необходимые компоненты

Рекомендуется иметь базовое представление о файлах рабочих процессов и параметрах конфигурации. Дополнительные сведения см. в разделе Изучение GitHub Actions.

Дополнительные сведения о создании рабочего процесса CI для проекта Java с помощью Maven см. в разделе "Сборка и тестирование в Java с помощью Maven".

Также могут быть полезны базовые знания в следующих областях:

Сведения о конфигурации пакета

Поля groupId и artifactId в файле pom.xml создают уникальный идентификатор для вашего пакета, который реестры используют для связывания вашего пакета с реестром. Дополнительные сведения см. в руководстве по загрузке артефактов в центральный репозиторий в документации по Apache Maven.

Файл pom.xml также содержит конфигурацию для репозиториев управления распределением, в которые Maven будет развертывать пакеты. Каждый репозиторий должен иметь имя и URL-адрес развертывания. Проверку подлинности для этих репозиториев можно настроить в файле .m2/settings.xml в домашнем каталоге пользователя, запустившего Maven.

Вы можете использовать действие setup-java для настройки репозитория развертывания, а также проверки подлинности для этого репозитория. Дополнительные сведения см. в разделе setup-java.

Публикация пакетов в центральный репозиторий Maven

При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом created. Если тесты CI проходят успешно, рабочий процесс публикует пакет в центральный репозитории Maven. Дополнительные сведения о событии release см. в разделе "События, инициирующие рабочие процессы".

В этом рабочем процессе вы можете использовать действие setup-java. Это действие устанавливает заданную версию JDK в PATH, а также настраивает файл Maven settings.xml для публикации пакетов. По умолчанию файл параметров будет настроен для GitHub Packages, но его можно настроить для развертывания в другом реестре пакетов, например в центральном репозитории Maven. Если у вас уже есть репозиторий управления распределением, настроенный в pom.xml, вы можете указать этот id во время вызова действия setup-java.

Например, если вы выполняли развертывание в центральном репозитории Maven через проект размещения OSSRH, ваш файл pom.xml мог указать репозиторий управления распределением с id ossrh.

XML
<project ...>
  ...
  <distributionManagement>
    <repository>
      <id>ossrh</id>
      <name>Central Repository OSSRH</name>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
  </distributionManagement>
</project>

С помощью этой конфигурации вы можете создать рабочий процесс, который публикует ваш пакет в центральном репозитории Maven, указав id управления репозиторием в действии setup-java. Вам также необходимо указать переменные среды, содержащие имя пользователя и пароль для проверки подлинности в репозитории.

На этапе развертывания вам нужно будет установить переменные среды для имени пользователя, с помощью которого вы будете выполнять проверку подлинности в репозитории, и для секрета, который вы настроили с помощью пароля или маркера для проверки подлинности. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.

YAML
name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Maven Central Repository
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Publish package
        run: mvn --batch-mode deploy
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

Этот рабочий процесс выполняет следующие действия:

  1. Извлекает копию репозитория проекта.

  2. Настраивает Java JDK, а также файл Maven settings.xml для добавления проверки подлинности для репозитория ossrh с использованием переменных среды MAVEN_USERNAME и MAVEN_PASSWORD.

  3. Выполняет команду mvn --batch-mode deploy для публикации в репозиторий ossrh. Переменная среды MAVEN_USERNAME будет задана с содержимым секрета OSSRH_USERNAME, а переменная среды MAVEN_PASSWORD — с содержимым секрета OSSRH_TOKEN.

    Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе "Использование секретов в GitHub Actions".

Публикация пакетов в GitHub Packages

При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом created. Если тесты CI проходят успешно, рабочий процесс публикует пакет в GitHub Packages. Дополнительные сведения о событии release см. в разделе "События, инициирующие рабочие процессы".

В этом рабочем процессе вы можете использовать действие setup-java. Это действие устанавливает указанную версию JDK в PATH, а также настраивает файл Maven settings.xml для публикации пакета в GitHub Packages. Сгенерированный файл settings.xml определяет проверку подлинности для сервера с id github, используя переменную среды GITHUB_ACTOR в качестве имени пользователя и переменную среды GITHUB_TOKEN в качестве пароля. Переменной среды GITHUB_TOKEN присваивается значение специального секрета GITHUB_TOKEN.

Секрет GITHUB_TOKEN устанавливается в качестве маркера доступа для репозитория при каждом запуске задания в рабочем процессе. Вам следует установить разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ на чтение в области contents и доступ на запись в области packages. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.

Для проекта на основе Maven вы можете использовать эти параметры, создав репозиторий распределения в файле pom.xml с id github, который указывает на конечную точку GitHub Packages.

Например, если название вашей организации — octocat, а репозитория — hello-world, то конфигурация GitHub Packages в pom.xml будет похожа на приведенную ниже.

XML
<project ...>
  ...
  <distributionManagement>
    <repository>
      <id>github</id>
      <name>GitHub Packages</name>
      <url>https://maven.pkg.github.com/octocat/hello-world</url>
    </repository>
  </distributionManagement>
</project>

С помощью этой конфигурации вы можете создать рабочий процесс, который публикует ваш пакет в GitHub Packages, используя автоматически сгенерированный файл settings.xml.

YAML
name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
      - name: Publish package
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Этот рабочий процесс выполняет следующие действия:

  1. Извлекает копию репозитория проекта.

  2. Настраивает Java JDK, а также автоматически настраивает файл Maven settings.xml, чтобы добавить проверку подлинности для репозитория github Maven для использования переменной среды GITHUB_TOKEN.

  3. Выполняет команду для публикации mvn --batch-mode deploy в GitHub Packages. Переменная среды GITHUB_TOKEN будет задана с содержимым секрета GITHUB_TOKEN. Ключ permissions указывает доступ, предоставленный для GITHUB_TOKEN.

    Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе "Использование секретов в GitHub Actions".

Публикация пакетов в центральный репозиторий Maven и GitHub Packages

Вы можете опубликовать свои пакеты как в центральном репозитории Maven, так и в GitHub Packages, используя действие setup-java для каждого реестра.

Убедитесь, что ваш файл pom.xml включает репозиторий управления распределением как для вашего репозитория GitHub, так и для вашего поставщика центрального репозитория Maven. Например, если вы выполняете развертывание в центральный репозиторий через проект размещения OSSRH, можно указать его в репозитории управления распределением с id со значением ossrh. Также вы можете указать GitHub Packages в репозитории управления распределением с id со значениемgithub.

YAML
name: Publish package to the Maven Central Repository and GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - name: Set up Java for publishing to Maven Central Repository
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Publish to the Maven Central Repository
        run: mvn --batch-mode deploy
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
      - name: Set up Java for publishing to GitHub Packages
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'
      - name: Publish to GitHub Packages
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Этот рабочий процесс дважды вызывает действие setup-java. При каждом запуске действия setup-java оно перезаписывает файл Maven settings.xml для публикации пакетов. Для проверки подлинности в репозитории файл settings.xml содержит ссылку на репозиторий управления распределением id, а также на имя пользователя и пароль.

Этот рабочий процесс выполняет следующие действия:

  1. Извлекает копию репозитория проекта.

  2. Вызывает setup-java в первый раз. В результате выполняется настройка файла Maven settings.xml для репозитория ossrh и установка параметров проверки подлинности для переменных среды, которые определяются на следующем шаге.

  3. Выполняет команду mvn --batch-mode deploy для публикации в репозиторий ossrh. Переменная среды MAVEN_USERNAME будет задана с содержимым секрета OSSRH_USERNAME, а переменная среды MAVEN_PASSWORD — с содержимым секрета OSSRH_TOKEN.

  4. Вызывает setup-java во второй раз. В результате выполняется автоматическая настройка файла Maven settings.xml для GitHub Packages.

  5. Выполняет команду для публикации mvn --batch-mode deploy в GitHub Packages. Переменная среды GITHUB_TOKEN будет задана с содержимым секрета GITHUB_TOKEN. Ключ permissions указывает доступ, предоставленный для GITHUB_TOKEN.

    Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе "Использование секретов в GitHub Actions".