Java Maven CI
Complete continuous integration workflow for a Java Maven project, including multi-JDK version matrix, build, test, and package.
name: Java Maven CI
on:
push:
branches:
- main
- 'release/**'
paths:
- 'src/**'
- 'pom.xml'
pull_request:
branches:
- main
concurrency:
max: 1
exceed-action: QUEUE
permissions:
repository: read
jobs:
build:
name: JDK ${{ matrix.java-version }} Build
runs-on: {ubuntu-24,x64,small}
strategy:
matrix:
java-version: [8, 11, 17, 21]
fail-fast: false
max-parallel: 4
steps:
- name: Checkout code
uses: checkout
- name: Setup JDK ${{ matrix.java-version }}
uses: setup-java
with:
java-version: ${{ matrix.java-version }}
distribution: 'temurin'
cache: 'maven'
- name: Maven Compile
run: mvn compile -B --no-transfer-progress
- name: Maven Unit Test
run: mvn test -B --no-transfer-progress
- name: Maven Integration Test
run: mvn verify -B --no-transfer-progress -DskipUnitTests
- name: Test Results Summary
if: ${{ always }}
run: |
echo "## Maven Test Results - JDK ${{ matrix.java-version }}" >> $ATOMGIT_STEP_SUMMARY
echo "Build Status: ${{ job.status }}" >> $ATOMGIT_STEP_SUMMARY
package:
name: Package and Release
needs: build
runs-on: {ubuntu-24,x64,small}
if: ${{ startsWith(atomgit.ref, 'refs/tags/') }}
steps:
- name: Checkout code
uses: checkout
- name: Setup JDK 17
uses: setup-java
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'
- name: Maven Package (Skip Tests)
run: mvn package -B -DskipTests --no-transfer-progress
- name: Upload JAR Artifact
uses: upload-artifact
with:
name: maven-artifacts
path: target/*.jar
retention-days: 30