If you want to integration-test your Maven project, you might already use GitHub Actions.
Testing with a Maven toolchain is a little more complex to set up. This tutorial will show how I did this for the maven-jlink-plugin.
Artikelstruktur
Creating your workflow
Create a new workflow, if you haven’t already. The workflow Java with Maven is a good starting point.
# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Java CI with Maven on: [ push, pull_request ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 11 - name: Build with Maven run: mvn -B package --file pom.xml
Set up your matrix
Modify as wanted, e.g. Ubuntu, Windows with Java 11 and 15.
jobs: build: strategy: matrix: os: [ ubuntu-latest, windows-latest ] java: [ 11, 15 ] fail-fast: false runs-on: ${{ matrix.os }}
Install the Toolchain JDK first
Now, the important part is to install a JDK which you want to use as a Toolchain JDK. I use jabba for this, but other means will also work. Just make sure you get a nice environment variable from it.
I install it with the jdk-via-jabba-action and save the location to the env-variable $TOOLCHAIN_JDK
. Make sure to place this before the setup-java-action:
jobs: build: # … - name: Install Toolchain JDK if: ${{ matrix.java == '8' }} uses: battila7/jdk-via-jabba@v1 with: jdk: adopt-openj9@1.11.0-7 javaHomeEnvironmentVariable: TOOLCHAIN_JDK
Create your toolchain.xml
file
Now, maven must be told that there is another JDK available for the toolchain plugin. We need to create a file $HOME/.m2/toolchains.xml
. As the write-file-action did not work for me, I reverted back to a simple bash HEREDOC to write a file using GitHub Actions. Place the following snipped directly after the jabba-action, but before the setup-java action:
jobs: build: # … other actions - name: Set up Toolchain if: ${{ matrix.java == '8' }} shell: bash run: | mkdir -p $HOME/.m2 \ && cat << EOF > $HOME/.m2/toolchains.xml <?xml version="1.0" encoding="UTF8"?> <toolchains> <toolchain> <type>jdk</type> <provides> <version>11</version> <vendor>adopt</vendor> </provides> <configuration> <jdkHome>${{ env.TOOLCHAIN_JDK }}</jdkHome> </configuration> </toolchain> </toolchains> EOF
As you can see I also added an if clause: It will only be used if the matrix runs with java 8, so I can check if the integration tests requiring java9+ will work by using a toolchain.
Maven will now use adopt-openj9@1.11.0-7 as a JDK11 toolchain java if needed.
Putting it all together
This is my complete GitHub Action with Toolchains for the maven-jlink-plugin:
Be First to Comment