Introduction
Este guia mostra como criar um fluxo de trabalho que publica pacotes Java no GitHub Packages e no Maven Central Repository. Com um único fluxo de trabalho, você pode publicar pacotes em um único repositório ou em vários repositórios.
Aviso
Os exemplos usados neste guia referem-se ao serviço OSSRH herdado. Consulte Publicação na documentação do Repositório Central do Maven.
Prerequisites
We recommend that you have a basic understanding of workflow files and configuration options. For more information, see Writing workflows.
For more information about creating a CI workflow for your Java project with Maven, see Building and testing Java with Maven.
You may also find it helpful to have a basic understanding of the following:
- Trabalhando com o registro do Apache Maven
- Store information in variables
- Using secrets in GitHub Actions
- Automatic token authentication
About package configuration
The groupId
and artifactId
fields in the pom.xml file create a unique identifier for your package that registries use to link your package to a registry. For more information see Guide to uploading artifacts to the Central Repository in the Apache Maven documentation.
Aviso
Seu pacote Apache Maven deve seguir a convenção de nomenclatura, portanto, o campo artifactId
deve conter apenas letras minúsculas, dígitos ou hifens. Para obter mais informações, confira Convenção de nomenclatura das coordenadas Maven na documentação do maven.apache.org. Se você usar letras maiúsculas no nome do artefato, obterá uma resposta 422 Unprocessable Entity.
The pom.xml file also contains configuration for the distribution management repositories that Maven will deploy packages to. Each repository must have a name and a deployment URL. Authentication for these repositories can be configured in the .m2/settings.xml file in the home directory of the user running Maven.
You can use the setup-java
action to configure the deployment repository as well as authentication for that repository. For more information, see setup-java
.
Publishing packages to the Maven Central Repository
Each time you create a new release, you can trigger a workflow to publish your package. The workflow in the example below runs when the release
event triggers with type created
. The workflow publishes the package to the Maven Central Repository if CI tests pass. For more information on the release
event, see Eventos que disparam fluxos de trabalho.
In this workflow, you can use the setup-java
action. This action installs the given version of the JDK into the PATH
, but it also configures a Maven settings.xml for publishing packages. By default, the settings file will be configured for GitHub Packages, but it can be configured to deploy to another package registry, such as the Maven Central Repository. If you already have a distribution management repository configured in pom.xml, then you can specify that id
during the setup-java
action invocation.
For example, if you were deploying to the Maven Central Repository through the OSSRH hosting project, your pom.xml could specify a distribution management repository with the id
of ossrh
.
<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>
<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>
With this configuration, you can create a workflow that publishes your package to the Maven Central Repository by specifying the repository management id
to the setup-java
action. You’ll also need to provide environment variables that contain the username and password to authenticate to the repository.
In the deploy step, you’ll need to set the environment variables to the username that you authenticate with to the repository, and to a secret that you’ve configured with the password or token to authenticate with. For more information, see Using secrets in GitHub Actions.
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 }}
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 }}
This workflow performs the following steps:
-
Checks out a copy of project's repository.
-
Sets up the Java JDK, and also configures the Maven settings.xml file to add authentication for the
ossrh
repository using theMAVEN_USERNAME
andMAVEN_PASSWORD
environment variables. -
Executa o comando
mvn --batch-mode deploy
a ser publicado no repositórioossrh
. A variável de ambienteMAVEN_USERNAME
será definida com o conteúdo do segredoOSSRH_USERNAME
, e a variável de ambienteMAVEN_PASSWORD
será definida com o conteúdo do segredoOSSRH_TOKEN
.For more information about using secrets in your workflow, see Using secrets in GitHub Actions.
Publishing packages to GitHub Packages
Each time you create a new release, you can trigger a workflow to publish your package. The workflow in the example below runs when the release
event triggers with type created
. The workflow publishes the package to GitHub Packages if CI tests pass. For more information on the release
event, see Eventos que disparam fluxos de trabalho.
In this workflow, you can use the setup-java
action. This action installs the given version of the JDK into the PATH
, and also sets up a Maven settings.xml for publishing the package to GitHub Packages. The generated settings.xml defines authentication for a server with an id
of github
, using the GITHUB_ACTOR
environment variable as the username and the GITHUB_TOKEN
environment variable as the password. The GITHUB_TOKEN
environment variable is assigned the value of the special GITHUB_TOKEN
secret.
O segredo GITHUB_TOKEN
é definido como um token de acesso para o repositório sempre que um trabalho em um fluxo de trabalho é iniciado. Você deve definir as permissões desse token de acesso no arquivo de fluxo de trabalho para permitir acesso de leitura à permissão contents
e acesso de gravação à permissão packages
. Para saber mais, confira Automatic token authentication.
For a Maven-based project, you can make use of these settings by creating a distribution repository in your pom.xml file with an id
of github
that points to your GitHub Packages endpoint.
For example, if your organization is named "octocat" and your repository is named "hello-world", then the GitHub Packages configuration in pom.xml would look similar to the below example.
<project ...> ... <distributionManagement> <repository> <id>github</id> <name>GitHub Packages</name> <url>https://maven.pkg.github.com/octocat/hello-world</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
With this configuration, you can create a workflow that publishes your package to GitHub Packages by making use of the automatically generated settings.xml.
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 }}
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 }}
This workflow performs the following steps:
-
Checks out a copy of project's repository.
-
Sets up the Java JDK, and also automatically configures the Maven settings.xml file to add authentication for the
github
Maven repository to use theGITHUB_TOKEN
environment variable. -
Executa o comando
mvn --batch-mode deploy
para publicação no GitHub Packages. A variável de ambienteGITHUB_TOKEN
será definida com o conteúdo do segredoGITHUB_TOKEN
. A chavepermissions
especifica o acesso concedido aoGITHUB_TOKEN
.For more information about using secrets in your workflow, see Using secrets in GitHub Actions.
Publishing packages to the Maven Central Repository and GitHub Packages
You can publish your packages to both the Maven Central Repository and GitHub Packages by using the setup-java
action for each registry.
Ensure your pom.xml file includes a distribution management repository for both your GitHub repository and your Maven Central Repository provider. For example, if you deploy to the Central Repository through the OSSRH hosting project, you might want to specify it in a distribution management repository with the id
set to ossrh
, and you might want to specify GitHub Packages in a distribution management repository with the id
set to github
.
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 }}
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 }}
This workflow calls the setup-java
action twice. Each time the setup-java
action runs, it overwrites the Maven settings.xml file for publishing packages. For authentication to the repository, the settings.xml file references the distribution management repository id
, and the username and password.
This workflow performs the following steps:
-
Checks out a copy of project's repository.
-
Calls
setup-java
the first time. This configures the Maven settings.xml file for theossrh
repository, and sets the authentication options to environment variables that are defined in the next step. -
Executa o comando
mvn --batch-mode deploy
a ser publicado no repositórioossrh
. A variável de ambienteMAVEN_USERNAME
será definida com o conteúdo do segredoOSSRH_USERNAME
, e a variável de ambienteMAVEN_PASSWORD
será definida com o conteúdo do segredoOSSRH_TOKEN
. -
Calls
setup-java
the second time. This automatically configures the Maven settings.xml file for GitHub Packages. -
Executa o comando
mvn --batch-mode deploy
para publicação no GitHub Packages. A variável de ambienteGITHUB_TOKEN
será definida com o conteúdo do segredoGITHUB_TOKEN
. A chavepermissions
especifica o acesso concedido aoGITHUB_TOKEN
.For more information about using secrets in your workflow, see Using secrets in GitHub Actions.