Skip to main content

Java bauen und testen mit Gradle

Du kannst einen Workflow für Continuous Integration (CI) in GitHub Actions erstellen, um dein Java-Projekt mit Gradle zu kompilieren und zu testen.

Einführung

Dieser Leitfaden zeigt Dir, wie du einen Workflow erstellen kannst, der eine kontinuierliche Integration (CI) für dein Java-Projekt mit Hilfe des Build-Systems Gradle durchführt. Der Workflow, den du erstellst, zeigt Dir, wenn Commits zu einem Pull-Request zu Build- oder Testfehlern für deinen Standard-Zweig führen. Dieser Ansatz kann dazu beitragen, dass dein Code immer brauchbar ist. Du kannst deinen CI-Workflow so erweitern, dass er Dateien zwischenspeichert und Artefakte aus einer Workflowausführung hochlädt.

GitHub-gehostete Runner verfügen über einen Toolcache mit vorinstallierter Software, die Java Development Kits (JDKs) und Gradle umfasst. Eine Liste der Software und der vorinstallierten Versionen für JDK und Gradle findest du unter „Spezifikationen für GitHub-gehostete Runner“.

Voraussetzungen

Du solltest mit YAML und der Syntax für GitHub Actions vertraut sein. Weitere Informationen finden Sie unter

Du solltest ein grundlegendes Verständnis von Java und dem Framework Gradle haben. Weitere Informationen findest du in der Gradle-Dokumentation unter Erste Schritte.

Verwenden des Gradle-Starterworkflows

GitHub bietet einen Gradle-Starterworkflow, der für die meisten Gradle-basierten Java-Projekte funktioniert. Weitere Informationen findest du unter Gradle-Starterworkflow.

Um schnell loszulegen, kannst du beim Erstellen eines neuen Workflows den vorkonfigurierten Gradle-Starterworkflow auswählen. Weitere Informationen findest du in der Schnellstartanleitung für GitHub Actions.

Du kannst diesen Workflow auch manuell hinzufügen, indem du eine neue Datei im Verzeichnis .github/workflows deines Repositorys erstellst.

YAML
# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>Sie werden von einem Drittanbieter bereitgestellt und unterliegen
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support
# <a name="documentation"></a>Onlinedokumentation.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>GitHub empfiehlt, Aktionen an einen Commit-SHA anzuheften.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>Um eine neuere Version zu erhalten, musst du den SHA aktualisieren.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>Du kannst auch auf ein Tag oder einen Branch verweisen, aber die Aktion kann sich ohne Vorwarnung ändern.

name: Java CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Build with Gradle
        uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
        with:
          arguments: build

Dieser Workflow führt die folgenden Schritte aus:

  1. Im Schritt checkout wird eine Kopie deines Repositorys auf den Runner heruntergeladen.
  2. Im Schritt setup-java wird das Java 11-JDK von Adoptium konfiguriert.
  3. Im Schritt „Valid Gradle wrapper“ werden die Prüfsummen von Gradle Wrapper JAR-Dateien überprüft, die in der Quellstruktur vorhanden sind.
  4. Im Schritt „Build with Gradle“ wird mit der Aktion gradle/gradle-build-action, die von der Gradle-Organisation auf GitHub bereitgestellt wird, ein Build ausgeführt. Die Aktion umfasst das Aufrufen von Gradle, das Sammeln von Ergebnissen und das Zwischenspeichern des Status zwischen Aufträgen. Weitere Informationen findest du unter gradle/gradle-build-action.

Die Standardstarterworkflows sind ausgezeichnete Ausgangspunkte beim Erstellen von Build- und Testworkflows, und du kannst den Starterworkflow den Anforderungen deines Projekts anpassen.

Ausführen auf einem anderen Betriebssystem

Die Vorlage zum Starter-Workflow konfiguriert Aufträge zur Ausführung unter Linux und verwendet mit GitHub gehostete ubuntu-latest-Runner. Du kannst den runs-on-Schlüssel ändern, um deine Aufträge auf einem anderen Betriebssystem auszuführen. Beispielsweise kannst Du die GitHub-gehosteten Windows-Läufer verwenden.

runs-on: windows-latest

Oder Du kannst auf den GitHub-gehosteten macOS-Läufern laufen.

runs-on: macos-latest

Du kannst Aufträge auch in Docker-Containern ausführen oder einen selbst gehosteten Läufer bereitstellen, der auf Deiner eigenen Infrastruktur läuft. Weitere Informationen findest du unter Workflowsyntax für GitHub Actions.

Spezifizieren der JVM-Version und -Architektur

Der Starterworkflow richtet PATH so ein, dass OpenJDK 8 für die x64-Plattform enthalten ist. Wenn du eine andere Java-Version verwenden willst oder auf eine andere Architektur (x64 oder x86) abzielen möchtest, kannst du die setup-java-Aktion verwenden, um eine andere Java-Laufzeitumgebung auszuwählen.

Um etwa Version 11 des JDK zu verwenden, das von Adoptium für die x64-Plattform bereitgestellt wird, kannst du die Aktion setup-java verwenden und die Parameter java-version, distribution und architecture für '11', 'adopt' und x64 konfigurieren.

YAML
steps:
  - uses: actions/checkout@v3
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v3
    with:
      java-version: '11'
      distribution: 'adopt'
      architecture: x64

Weitere Informationen findest du unter der Aktion setup-java.

Deinen Code bauen und testen

Du kannst die gleichen Befehle verwenden, die du auch lokal verwendest, um deinen Code zu bauen und zu testen.

Der Starterworkflow führt standardmäßig die build-Aufgabe aus. In der Standard-Gradle-Konfiguration lädt dieser Befehl Abhängigkeiten herunter, baut Klassen, führt Tests durch und paketiert Klassen in ihr verteilbares Format, zum Beispiel eine JAR-Datei.

Wenn du zum Bauen deines Projekts andere Befehle verwenden oder einen anderen Task auszuführen möchtest, kannst du dies angeben. Du kannst beispielsweise die package-Aufgabe ausführen, die in der ci.gradle-Datei konfiguriert ist.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '11'
      distribution: 'adopt'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
  - name: Run the Gradle package task
    uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
    with:
      arguments: -b ci.gradle package

Abhängigkeiten „cachen“ (zwischenspeichern)

Deine Buildabhängigkeiten können zwischengespeichert werden, um deine Workflowausführungen zu beschleunigen. Nach einer erfolgreichen Ausführung werden wichtige Teile des Basisverzeichnisses für Gradle-Benutzer von gradle/gradle-build-action zwischengespeichert. In künftigen Aufträgen wird der Cache wiederhergestellt, sodass Buildskripts nicht neu kompiliert werden müssen und Abhängigkeiten nicht erneut aus Remotepaketrepositorys heruntergeladen werden müssen.

Das Zwischenspeichern ist standardmäßig aktiviert, wenn die Aktion gradle/gradle-build-action verwendet wird. Weitere Informationen findest du unter gradle/gradle-build-action.

Workflow-Daten als Artefakte paketieren

Nachdem sowohl Build erfolgreich war und deine Tests bestanden hat, wirst du die resultierenden Java-Pakete als Build-Artefakt hochladen wollen. Dies speichert die gebauten Pakete als Teil der Workflow-Ausführung und ermöglicht Dir, sie herunterzuladen. Artefakte können Dir helfen, Pull-Requests in deiner lokalen Umgebung zu testen und zu debuggen, bevor sie zusammengeführt werden („merge“). Weitere Informationen findest du unter Speichern von Workflowdaten mithilfe von Artefakten.

Gradle erstellt normalerweise Ausgabedateien wie JARs, EARs oder WARs im Verzeichnis build/libs. Du kannst den Inhalt dieses Verzeichnisses mit der Aktion upload-artifact hochladen.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '11'
      distribution: 'adopt'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
  - name: Build with Gradle
    uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
    with:
      arguments: build
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: build/libs