Skip to main content

Publicar paquetes Java con Maven

Puedes usar Maven para publicar paquetes Java en un registro como parte de tu flujo de trabajo de integración continua (CI).

Introducción

Esta guía te muestra cómo crear un flujo de trabajo que publique paquetes de Java en GitHub Packages y en el Repositorio Central de Maven. Con un solo flujo de trabajo, puedes publicar los paquetes en un solo repositorio o en varios repositorios.

Prerrequisitos

Te recomendamos que tengas una comprensión básica de los archivos de flujo de trabajo y las opciones de configuración. Para más información, vea "Más información sobre GitHub Actions".

Para obtener más información sobre cómo crear un flujo de trabajo de CI para el proyecto de Java con Maven, consulta "Creación y pruebas de Java con Maven".

También puede ser útil tener un entendimiento básico de lo siguiente:

Acerca de la configuración del paquete

Los campos groupId y artifactId del archivo pom.xml crean un identificador único para el paquete que los registros usan para vincular el paquete a un registro. Para obtener más información, consulta Guía para cargar artefactos en el repositorio central en la documentación de Apache Maven.

El archivo pom.xml también contiene la configuración de los repositorios de administración de distribución en los que Maven implementará los paquetes. Cada repositorio debe tener un nombre y una URL de implementación. La autenticación para estos repositorios se puede configurar en el archivo .m2/settings.xml del directorio de inicio del usuario que ejecuta Maven.

Puedes usar la acción setup-java para configurar el repositorio de implementación, así como la autenticación para ese repositorio. Para más información, vea setup-java.

Publicar paquetes en el repositorio central de Maven

Cada vez que crees un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo del ejemplo siguiente se ejecuta cuando se desencadena el evento release con el tipo created. El flujo de trabajo publica el paquete en el repositorio central de Maven si se superan las pruebas de CI. Para obtener más información sobre el evento release, consulta "Eventos que desencadenan flujos de trabajo".

En este flujo de trabajo, puedes usar la acción setup-java. Esta acción instala la versión especificada del JDK en PATH, pero también configura un archivo settings.xml de Maven para publicar los paquetes. Por defecto, el archivo de configuraciones se configurará para GitHub Packages, pero se puede configurar para que se implemente en otro registro de paquetes, como el repositorio central de Maven. Si ya tienes un repositorio de administración de distribución configurado en pom.xml, puedes especificar ese id durante la invocación de la acción setup-java.

Por ejemplo, si vas a realizar la implementación en el repositorio central de Maven mediante el proyecto de hospedaje OSSRH, en pom.xml se podría especificar un repositorio de administración de distribución con el id de 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>

Con esta configuración, puedes crear un flujo de trabajo que publique el paquete en el repositorio central de Maven especificando la administración de repositorio id en la acción setup-java. También deberás proporcionar variables de entorno que contengan el nombre de usuario y la contraseña para autenticarse en el repositorio.

En el paso de implementación, necesitarás establecer las variables de entorno para el nombre de usuario con el que te autenticaste en el repositorio y para el secreto que hayas configurado con la contraseña o el token con que autenticarse. Para más información, vea "Creación y uso de secretos cifrados".

YAML
name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Maven Central Repository
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
          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 }}

Este flujo de trabajo realiza los siguientes pasos:

  1. Revisa una copia del repositorio del proyecto.

  2. Configura el JDK de Java y también configura el archivo settings.xml de Maven para agregar la autenticación para el repositorio ossrh mediante las variables de entorno MAVEN_USERNAME y MAVEN_PASSWORD.

  3. Ejecuta el comando mvn --batch-mode deploy para publicar en el repositorio ossrh. La variable de entorno MAVEN_USERNAME se establecerá con el contenido del secreto OSSRH_USERNAME y la variable de entorno MAVEN_PASSWORD se establecerá con el contenido del secreto OSSRH_TOKEN.

    Para obtener más información sobre el uso de secretos en el flujo de trabajo, consulta "Creación y uso de secretos cifrados".

Sube paquetes al GitHub Packages

Cada vez que crees un lanzamiento nuevo, puedes desencadenar un flujo de trabajo para publicar tu paquete. El flujo de trabajo del ejemplo siguiente se ejecuta cuando se desencadena el evento release con el tipo created. El flujo de trabajo publica el paquete en el GitHub Packages si se superan las pruebas de CI. Para obtener más información sobre el evento release, consulta "Eventos que desencadenan flujos de trabajo".

En este flujo de trabajo, puedes usar la acción setup-java. Esta acción instala la versión especificada del JDK en el PATH y configura un archivo settings.xml de Maven para publicar el paquete en el GitHub Packages. El archivo settings.xml generado define la autenticación de un servidor con un id de github, utilizando la variable de entorno GITHUB_ACTOR como nombre de usuario y la variable de entorno GITHUB_TOKEN como contraseña. A la variable de entorno GITHUB_TOKEN se le asigna el valor del secreto GITHUB_TOKEN especial.

El secreto GITHUB_TOKEN se establece en un token de acceso para el repositorio cada vez que comienza un trabajo en un flujo de trabajo. Debes establecer los permisos para este token de acceso en el archivo del flujo de trabajo a fin de conceder acceso de lectura al ámbito contents y acceso de escritura al ámbito packages. Para más información, vea "Autenticación con GITHUB_TOKEN".

Para un proyecto basado en Maven, puedes usar esta configuración mediante la creación de un repositorio de distribución en el archivo pom.xml con un id de github que apunta al punto de conexión de GitHub Packages.

Por ejemplo, si el nombre de la organización es "octocat" y el del repositorio es "hello-world", la configuración de GitHub Packages en pom.xml tendría un aspecto similar al del ejemplo siguiente.

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

Con esta configuración, puedes crear un flujo de trabajo que publique tu paquete en GitHub Packages haciendo uso del archivo settings.xml generado automáticamente.

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@v3
      - uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Publish package
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Este flujo de trabajo realiza los siguientes pasos:

  1. Revisa una copia del repositorio del proyecto.

  2. Configura el JDK de Java y también configura automáticamente el archivo settings.xml de Maven para agregar la autenticación para el repositorio github de Maven mediante para que use la variable de entorno GITHUB_TOKEN.

  3. Ejecuta el comando mvn --batch-mode deploy para publicar en GitHub Packages. La variable de entorno GITHUB_TOKEN se establecerá con el contenido del secreto GITHUB_TOKEN. La clave permissions especifica el acceso concedido a GITHUB_TOKEN.

    Para obtener más información sobre el uso de secretos en el flujo de trabajo, consulta "Creación y uso de secretos cifrados".

Publicar paquetes en el repositorio central de Maven y GitHub Packages

Puedes publicar tus paquetes en el repositorio central de Maven y en el GitHub Packages usando la acción setup-java para cada registro.

Asegúrate de que tu archivo pom.xml incluya un repositorio de administración de distribución para tu repositorio de GitHub y para tu proveedor de repositorios centrales de Maven. Por ejemplo, si implementas el repositorio central a través del proyecto de hospedaje de OSSRH, es posible que quieras especificarlo en un repositorio de administración de distribución con id establecido en ossrh, y que quieras especificar el GitHub Packages en un repositorio de administración de distribución con id establecido en 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@v3
      - name: Set up Java for publishing to Maven Central Repository
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
          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@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Publish to GitHub Packages
        run: mvn --batch-mode deploy
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Este flujo de trabajo llama a la acción setup-java dos veces. Cada vez que se ejecuta la acción setup-java, sobrescribe el archivo settings.xml de Maven para publicar los paquetes. Para la autenticación en el repositorio, el archivo settings.xml hace referencia al repositorio de administración de distribución id y al nombre de usuario y la contraseña.

Este flujo de trabajo realiza los siguientes pasos:

  1. Revisa una copia del repositorio del proyecto.

  2. Llama a setup-java por primera vez. Esto configura el archivo settings.xml de Maven para el repositorio ossrh y establece las opciones de autenticación en variables de entorno definidas en el paso siguiente.

  3. Ejecuta el comando mvn --batch-mode deploy para publicar en el repositorio ossrh. La variable de entorno MAVEN_USERNAME se establecerá con el contenido del secreto OSSRH_USERNAME y la variable de entorno MAVEN_PASSWORD se establecerá con el contenido del secreto OSSRH_TOKEN.

  4. Llama a setup-java por segunda vez. Esto configura automáticamente el archivo settings.xml de Maven para el GitHub Packages.

  5. Ejecuta el comando mvn --batch-mode deploy para publicar en GitHub Packages. La variable de entorno GITHUB_TOKEN se establecerá con el contenido del secreto GITHUB_TOKEN. La clave permissions especifica el acceso concedido a GITHUB_TOKEN.

    Para obtener más información sobre el uso de secretos en el flujo de trabajo, consulta "Creación y uso de secretos cifrados".