# Veröffentlichen Java Pakete mit Maven

In diesem Lernprogramm erfahren Sie, wie Sie maven verwenden, um Java Pakete als Teil Ihres 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.

> \[!WARNING] Die in diesem Leitfaden verwendeten Beispiele beziehen sich auf den OSSRH-Legacydienst. Weitere Informationen findest du unter [Veröffentlichung](https://central.sonatype.org/faq/what-is-different-between-central-portal-and-legacy-ossrh/#publishing) in der Maven Central Repository-Dokumentation.

## Voraussetzungen

Wir empfehlen Dir, ein grundlegendes Verständnis von Workflow-Dateien und Konfigurationsoptionen zu haben. Weitere Informationen finden Sie unter [Schreiben von Workflows](/de/enterprise-server@3.22/actions/how-tos/write-workflows).

Weitere Informationen zum Erstellen eines CI-Workflows für Ihr Java Projekt mit Maven finden Sie unter [Erstellen und Testen Java mit Maven](/de/enterprise-server@3.22/actions/tutorials/build-and-test-code/java-with-maven).

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

* [Arbeiten mit der Apache Maven-Registrierung](/de/enterprise-server@3.22/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry)
* [Speichern von Informationen in Variablen](/de/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables)
* [Verwenden von Geheimnissen in GitHub-Aktionen](/de/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)
* [Verwenden von GITHUB\_TOKEN für die Authentifizierung in Workflows](/de/enterprise-server@3.22/actions/tutorials/authenticate-with-github_token)

## 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](https://maven.apache.org/repository/guide-central-repository-upload.html) in der Apache Maven-Dokumentation.

> \[!WARNING] Dein Apache Maven-Paket muss der Benennungskonvention entsprechen, und daher sollte das Feld `artifactId` nur Kleinbuchstaben, Ziffern oder Bindestriche enthalten. Weitere Informationen findest du unter [Benennungskonvention von Maven-Koordinaten](https://maven.apache.org/guides/mini/guide-naming-conventions.html) in der Dokumentation auf maven.apache.org. Wenn du im Artefaktnamen Großbuchstaben verwendest, wird die Antwort *422 Unprocessable Entity* zurückgegeben.

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`](https://github.com/actions/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](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/events-that-trigger-workflows#release).

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 Einstellungsdatei für GitHub Packageskonfiguriert, kann jedoch so konfiguriert werden, dass sie in einer anderen Paketregistrierung bereitgestellt wird, z. B. das Maven Central Repository. 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 copy
<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 finden Sie unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).

```yaml copy
name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - 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. Prüft eine Kopie des Projekt-Repositorys aus.
2. Richtet das Java JDK ein und konfiguriert außerdem die Maven \_settings.xml\_Datei, um die Authentifizierung für das Repository `ossrh` mithilfe der Variablen `MAVEN_USERNAME` und `MAVEN_PASSWORD` Umgebung 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](/de/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).

## Pakete auf 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 auf GitHub Packages, wenn die CI-Tests erfolgreich sind. Weitere Informationen zum `release`-Ereignis findest du unter [Ereignisse zum Auslösen von Workflows](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/events-that-trigger-workflows#release).

In diesem Workflow kannst du die `setup-java`-Aktion verwenden. Mit dieser Aktion wird die angegebene Version des JDK unter `PATH` installiert, und außerdem wird eine Maven-*settings.xml* zum Veröffentlichen des Pakets bei GitHub Packages eingerichtet. 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 gesetzt, wenn ein Job in einem Workflow beginnt. Die Berechtigungen für dieses Zugriffstoken müssen in der Workflowdatei festgelegt werden, um den Lesezugriff auf die `contents`-Berechtigung und Schreibzugriff auf die `packages`-Berechtigung zu gewähren. Weitere Informationen finden Sie unter [Verwenden von GITHUB\_TOKEN für die Authentifizierung in Workflows](/de/enterprise-server@3.22/actions/tutorials/authenticate-with-github_token).

Für ein Maven-basiertes Projekt können Sie diese Einstellungen nutzen, indem Sie in Ihrer *pom.xml*-Datei ein Distributions-Repository mit einer `id` von `github` erstellen, die auf Ihren GitHub Packages-Endpunkt verweist.

Wenn Ihre Organisation beispielsweise "octocat" heißt und Ihr Repository "hello-world" heißt, würde die GitHub Packages Konfiguration in *pom.xml* dem folgenden Beispiel ähnlich aussehen.

```xml copy
<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 können Sie einen Workflow erstellen, der Ihr Paket in GitHub Packages veröffentlicht, indem Sie die automatisch generierte *settings.xml* verwenden.

```yaml copy
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@v6
      - 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. Prüft eine Kopie des Projekt-Repositorys aus.
2. Richtet das Java JDK ein und konfiguriert automatisch die Maven \_settings.xml\_Datei, um die Authentifizierung für das `github` Maven-Repository hinzuzufügen, um die Umgebungsvariable `GITHUB_TOKEN` zu verwenden.
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](/de/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).

## Veröffentlichen von Paketen im Maven Central Repository und GitHub Packages

Sie können Ihre Pakete sowohl im Maven Central Repository als auch auf GitHub Packages veröffentlichen, indem Sie für jede Registry die Aktion `setup-java` verwenden.

Stellen Sie sicher, dass Ihre \_pom.xml-Datei \_ ein Verteilungsverwaltungs-Repository für Ihr GitHub Repository und Ihren Maven Central Repository-Anbieter enthält. Wenn Sie beispielsweise über das OSSRH-Hostingprojekt im zentralen Repository veröffentlichen, möchten Sie es möglicherweise in einem distributionManagement-Repository angeben, wobei `id` auf `ossrh` gesetzt ist, und Sie möchten möglicherweise GitHub Packages in einem distributionManagement-Repository angeben, wobei `id` auf `github` gesetzt ist.

```yaml copy
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@v6
      - 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. Prüft 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-*settings.xml*-Datei für GitHub Packages automatisch 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](/de/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).