Hinweis: GitHub-gehostete Runner werden auf GitHub Enterprise Server derzeit nicht unterstützt. Weitere Informationen zur geplanten zukünftigen Unterstützung findest Du in der GitHub public roadmap.
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 Software-Projektmanagement-Tools Maven 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 haben einen Toolcache mit vorinstallierter Software, zu der Java Development Kits (JDKs) und Maven gehören. Eine Liste der Software und der vorinstallierten Versionen für JDK und Maven findest du unter Verwenden von auf GitHub gehosteten Runnern.
Voraussetzungen
Du solltest mit YAML und der Syntax für GitHub Actions vertraut sein. Weitere Informationen findest du unter:
Du solltest ein grundlegendes Verständnis von Java und dem Framework Maven haben. Weitere Informationen findest du in der Maven-Dokumentation im Maven-Leitfaden zu den ersten Schritten.
Verwendung von selbstgehosteten Runnern auf GitHub Enterprise Server
Wenn du Setup-Aktionen (wie z.B.actions/setup-LANGUAGE
) auf GitHub Enterprise Server mit selbstgehosteten Runnern verwendest, musst du möglicherweise den Tools-Cache auf Runnern einrichten, die keinen Internetzugang haben. Weitere Informationen finden Sie unter Einrichten des Toolcaches auf selbstgehosteten Runnern ohne Internetzugriff.
Verwenden einer Maven-Workflowvorlage
Fügen Sie für einen schnellen Einstieg dem Verzeichnis .github/workflows
Ihres Repositorys eine Workflowvorlage hinzu.
GitHub bietet eine Workflowvorlage für Maven, die für die meisten Projekte für Java mit Maven funktionieren sollte. In den nachfolgenden Abschnitten dieser Anleitung finden Sie Beispiele dafür, wie diese Workflowvorlage angepasst werden kann.
-
Navigieren Sie auf GitHub zur Hauptseite des Repositorys.
-
Klicke unter dem Namen deines Repositorys auf Aktionen.
-
Wenn du bereits über einen Workflow im Repository verfügst, klicke auf Neuer Workflow.
-
Auf der Seite „Workflow auswählen“ wird eine Auswahl empfohlener Workflowvorlagen angezeigt. Suchen Sie nach „Java mit Maven“.
-
Klicken Sie im Workflow „Java mit Maven“ auf Konfigurieren.
Wenn Sie die Workflowvorlage „Java mit Maven“ nicht finden, kopieren Sie den folgenden Workflowcode in eine neue Datei namens
maven.yml
im Verzeichnis.github/workflows
Ihres Repositorys.YAML name: Java CI with Maven on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B package --file pom.xml # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - name: Update dependency graph uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
name: Java CI with Maven on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B package --file pom.xml # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - name: Update dependency graph uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
-
Bearbeiten Sie den Workflow nach Bedarf. Ändern Sie beispielsweise die Java-Version.
-
Klicke auf Änderungen committen.
Spezifizieren der Java-Version und -Architektur
Die Workflowvorlage 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'
, 'temurin'
und x64
konfigurieren.
steps: - uses: actions/checkout@v4 - name: Set up JDK 11 for x64 uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' architecture: x64
steps:
- uses: actions/checkout@v4
- name: Set up JDK 11 for x64
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
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.
Die Workflowvorlage führt standardmäßig das package
-Ziel aus. In der Standard-Maven-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 ein anderes Ziel auszuführen möchtest, kannst du dies angeben. Du kannst beispielsweise das verify
-Ziel ausführen, das in einer Datei pom-ci.xml konfiguriert ist.
steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Run the Maven verify phase run: mvn --batch-mode --update-snapshots verify
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Run the Maven verify phase
run: mvn --batch-mode --update-snapshots verify
Abhängigkeiten „cachen“ (zwischenspeichern)
Du kannst deine Abhängigkeiten zwischenspeichern, um die Workflow-Ausführungen zu beschleunigen. Nach einer erfolgreichen Ausführung wird dein lokales Maven-Repository in einem Cache gespeichert. Bei zukünftigen Workflow-Ausführungen wird der Cache wiederhergestellt, so dass Abhängigkeiten nicht aus entfernten Maven-Repositories heruntergeladen werden müssen. Du kannst Abhängigkeiten einfach mithilfe der setup-java
-Aktion zwischenspeichern oder die cache
-Aktion für eine benutzerdefinierte und erweiterte Konfiguration verwenden.
steps: - uses: actions/checkout@v4 - name: Set up JDK 11 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn --batch-mode --update-snapshots verify
steps:
- uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn --batch-mode --update-snapshots verify
Dieser Workflow speichert den Inhalt deines lokalen Maven-Repositorys, das sich im Verzeichnis .m2
des Basisverzeichnisses auf dem Runner befindet. Der Cacheschlüssel ist der Hashinhalt von pom.xml, sodass Änderungen an pom.xml den Cache ungültig machen.
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 und Freigeben von Daten aus einem Workflow.
Maven erstellt normalerweise Ausgabedateien wie JARs, EARs oder WARs im Verzeichnis target
. Um diese als Artefakte hochzuladen, kannst du sie in ein neues Verzeichnis kopieren, welches Artefakte zum Hochladen enthält. Zum Beispiel kannst du ein Verzeichnis namens staging
erstellen. Anschließend kannst du den Inhalt dieses Verzeichnisses mithilfe der Aktion upload-artifact
hochladen.
steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - run: mvn --batch-mode --update-snapshots verify - run: mkdir staging && cp target/*.jar staging - uses: actions/upload-artifact@v3 with: name: Package path: staging
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- run: mvn --batch-mode --update-snapshots verify
- run: mkdir staging && cp target/*.jar staging
- uses: actions/upload-artifact@v3
with:
name: Package
path: staging