Skip to main content

Java-Pakete mit Maven veröffentlichen

Du kannst Maven verwenden, um Java-Pakete als Teil deines CI-Workflows (Continuous Integration) in einer Registrierung zu veröffentlichen.

Einführung

Diese Anleitung zeigt, wie Du einen Workflow erstellst, der Java-Pakete in das GitHub Packages und das Maven Central Repository veröffentlicht. Mit einem einzelnen Workflow kannst Du Pakete in ein einzelnes oder in mehrere Repositorys veröffentlichen.

Voraussetzungen

Wir empfehlen Dir, ein grundlegendes Verständnis von Workflow-Dateien und Konfigurationsoptionen zu haben. Weitere Informationen findest du unter Informationen zu GitHub Actions.

Weitere Informationen zum Erstellen eines CI-Workflows für dein Java-Projekt mit Maven findest du unter Java bauen und testen mit Maven.

Vielleicht findest Du es auch hilfreich, ein grundlegendes Verständnis von Folgendem zu haben:

Informationen zur Paketkonfiguration

Die Felder groupId und artifactId in der Datei pom.xml erstellen einen eindeutigen Bezeichner für dein Paket, der von Registrierungen zum Verknüpfen deines Pakets mit einer Registrierung verwendet wird. Weitere Informationen findest du im Leitfaden zum Hochladen von Artefakten in das zentrale Repository in der Apache Maven-Dokumentation.

Die Datei pom.xml enthält auch die Konfiguration für die Distributionsverwaltungsrepositorys, in denen Maven Pakete veröffentlicht. Jedes Repository braucht einen Namen und eine „Deployment-URL“ (Bereitstellungs-URL). Die Authentifizierung für diese Repositorys kann in der Datei .m2/settings.xml im Basisverzeichnis des Benutzers konfiguriert werden, der Maven ausführt.

Du kannst die Aktion setup-java verwenden, um das Bereitstellungsrepository und die Authentifizierung für dieses Repository zu konfigurieren. Weitere Informationen findest du unter setup-java.

Pakete im „Maven Central Repository“ veröffentlichen

Jedes Mal, wenn Du ein neues Release erstellst, kannst Du einen Workflow anstoßen, um Dein Paket zu veröffentlichen. Der Workflow im folgenden Beispiel wird ausgeführt, wenn das release-Ereignis mit dem created-Typ ausgelöst wird. Der Workflow veröffentlicht das Paket im „Maven Central Repository“, sofern es die CI-Tests besteht. Weitere Informationen zum release-Ereignis findest du unter Ereignisse zum Auslösen von Workflows.

In diesem Workflow kannst du die setup-java-Aktion verwenden. Diese Aktion installiert die angegebene Version des JDK in PATH, aber konfiguriert auch eine Maven-Datei settings.xml für die Veröffentlichung von Paketen. Standardmäßig wird die Settings-Datei für GitHub Packages konfiguriert, aber sie kann dazu konfiguriert werden, in eine andere Paket-Registry wie z.B. das „Maven Central Repository“ zu deployen. Wenn du bereits ein Distributionsverwaltungsrepository in _pom.xml_konfiguriert hast, kannst du diese id beim Aufruf der Aktion setup-java angeben.

Wenn du die Bereitstellung für das Maven Central Repository beispielsweise über das OSSRH-Hostingprojekt durchgeführt hast, könnte deine Datei pom.xml ein Distributionsverwaltungsrepository mit der id ossrh angeben.

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>

Mit dieser Konfiguration kannst du einen Workflow erstellen, der dein Paket im Maven Central Repository veröffentlicht, indem du die id der Repositoryverwaltung in der setup-java-Aktion angibst. Du musst auch Umgebungsvariablen bereitstellen, die den Benutzernamen und das Kennwort enthalten, um Dich im Repository zu authentifizieren.

Im Deploy-Schritt musst du die Umgebungsvariablen auf den Benutzernamen setzen, mit dem du Dich im Repository anmeldest, und auf ein Geheimnis, das du mit dem Passwort oder dem Token konfiguriert hast, mit dem du Dich authentifizierst. Weitere Informationen findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.

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 }}

Dieser Workflow führt die folgenden Schritte aus:

  1. Checkt eine Kopie des Projekt-Repositorys aus.

  2. Richtet das Java JDK ein und konfiguriert auch die Maven-Datei settings.xml, um die Authentifizierung für das ossrh-Repository über die Umgebungsvariablen MAVEN_USERNAME und MAVEN_PASSWORD hinzuzufügen.

  3. Führt den Befehl mvn --batch-mode deploy aus, um das Repository ossrh veröffentlichen. Die Umgebungsvariable MAVEN_USERNAME wird mit dem Inhalt Ihres OSSRH_USERNAME-Geheimnisses festgelegt, und die Umgebungsvariable MAVEN_PASSWORD wird mit dem Inhalt Ihres OSSRH_TOKEN-Geheimnisses festgelegt.

    Weitere Informationen zur Verwendung von Geheimnissen in deinem Workflow findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.

Pakete in der GitHub Packages veröffentlichen

Jedes Mal, wenn Du ein neues Release erstellst, kannst Du einen Workflow anstoßen, um Dein Paket zu veröffentlichen. Der Workflow im folgenden Beispiel wird ausgeführt, wenn das release-Ereignis mit dem created-Typ ausgelöst wird. Der Workflow veröffentlicht das Paket in GitHub Packages , wenn die CI-Tests bestanden wurden. Weitere Informationen zum release-Ereignis findest du unter Ereignisse zum Auslösen von Workflows.

In diesem Workflow kannst du die setup-java-Aktion verwenden. Diese Aktion installiert die angegebene JDK-Version in PATH und richtet zudem eine Maven-Datei settings.xml für die Veröffentlichung des Pakets in der GitHub Packages ein. Die generierte Datei settings.xml definiert die Authentifizierung für einen Server mit der id github, wobei die Umgebungsvariable GITHUB_ACTOR als Benutzername und die Umgebungsvariable GITHUB_TOKEN als Kennwort verwendet wird. Der Umgebungsvariablen GITHUB_TOKEN wird der Wert des speziellen GITHUB_TOKEN-Geheimnisses zugewiesen.

Das GITHUB_TOKEN-Geheimnis wird jedes Mal auf ein Zugriffstoken für das Repository festgelegt, wenn ein Auftrag in einem Workflow beginnt. Die Berechtigungen für dieses Zugriffstoken müssen in der Workflowdatei festgelegt werden, um Lesezugriff auf den contents-Bereich und Schreibzugriff auf den packages-Bereich zu gewähren. Weitere Informationen findest du unter Automatische Tokenauthentifizierung.

Für ein Maven-basiertes Projekt kannst du diese Einstellungen verwenden, indem du in deiner Datei pom.xml ein Distributionsrepository mit der id github erstellst, das auf deinen GitHub Packages-Endpunkt verweist.

Wenn deine Organisation beispielsweise „octocat“ und dein Repository „hello-world“ heißen, sieht die GitHub Packages-Konfiguration in pom.xml ähnlich dem folgenden Beispiel aus.

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

Mit dieser Konfiguration kannst du einen Workflow erstellen, der dein Paket anhand der automatisch generierten Datei settings.xml in der GitHub Packages veröffentlicht.

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 }}

Dieser Workflow führt die folgenden Schritte aus:

  1. Checkt eine Kopie des Projekt-Repositorys aus.

  2. Richtet das Java JDK ein und konfiguriert auch automatisch die Maven-Datei settings.xml, um die Authentifizierung für das github-Maven-Repository über die Umgebungsvariable GITHUB_TOKEN hinzuzufügen.

  3. Führt den Befehl mvn --batch-mode deploy aus, um die Veröffentlichung in GitHub Packages durchzuführen. Die Umgebungsvariable GITHUB_TOKEN wird mit dem Inhalt des GITHUB_TOKEN-Geheimnisses festgelegt. Der Schlüssel permissions gibt den Zugriff an, der GITHUB_TOKEN gewährt wird.

    Weitere Informationen zur Verwendung von Geheimnissen in deinem Workflow findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.

Pakete im Maven Central Repository und in der GitHub Packages veröffentlichen

Du kannst deine Pakete sowohl im Maven Central Repository als auch in der GitHub Packages veröffentlichen, indem du für jede Registrierung die Aktion setup-java verwendest.

Stelle sicher, dass deine Datei pom.xml ein Distributionsverwaltungsrepository sowohl für dein GitHub-Repository als auch für deinen Maven Central Repository-Anbieter enthält. Wenn du die Bereitstellung für das Central Repository beispielsweise über das OSSRH-Hostingprojekt durchführst, solltest du es in einem Distributionsverwaltungsrepository angeben, dessen id auf ossrh festgelegt ist. Außerdem solltest du GitHub Packages in einem Distributionsverwaltungsrepository angeben, dessen id auf github festgelegt ist.

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 }}

Dieser Workflow ruft die setup-java-Aktion zweimal auf. Jedes Mal, wenn die setup-java-Aktion ausgeführt wird, wird die Maven-Datei settings.xml für die Veröffentlichung von Paketen überschrieben. Bei der Authentifizierung beim Repository verweist die Datei settings.xml auf das Distributionsverwaltungsrepository id sowie auf den Benutzernamen und das Kennwort.

Dieser Workflow führt die folgenden Schritte aus:

  1. Checkt eine Kopie des Projekt-Repositorys aus.

  2. Ruft setup-java zum ersten Mal auf. Dadurch wird die Maven-Datei settings.xml für das ossrh-Repository konfiguriert, und die Authentifizierungsoptionen werden auf Umgebungsvariablen festgelegt, die im nächsten Schritt definiert werden.

  3. Führt den Befehl mvn --batch-mode deploy aus, um das Repository ossrh veröffentlichen. Die Umgebungsvariable MAVEN_USERNAME wird mit dem Inhalt Ihres OSSRH_USERNAME-Geheimnisses festgelegt, und die Umgebungsvariable MAVEN_PASSWORD wird mit dem Inhalt Ihres OSSRH_TOKEN-Geheimnisses festgelegt.

  4. Ruft setup-java zum zweiten Mal auf. Dadurch wird die Maven-Datei settings.xml automatisch für GitHub Packages konfiguriert.

  5. Führt den Befehl mvn --batch-mode deploy aus, um die Veröffentlichung in GitHub Packages durchzuführen. Die Umgebungsvariable GITHUB_TOKEN wird mit dem Inhalt des GITHUB_TOKEN-Geheimnisses festgelegt. Der Schlüssel permissions gibt den Zugriff an, der GITHUB_TOKEN gewährt wird.

    Weitere Informationen zur Verwendung von Geheimnissen in deinem Workflow findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.