Skip to content

Repository files navigation

setup-java

GitHub Actions status

This action sets up a java environment for use in actions by:

  • optionally downloading and caching a requested version of java by version and adding to PATH. Default downloads are populated from the Zulu Community distribution of OpenJDK
  • registering problem matchers for error output

Usage

See action.yml

Basic

steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1with:
java-version: '9.0.4'# The JDK version to make available on the path.java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdkarchitecture: x64# (x64 or x86) - defaults to x64
- run: java -cp java HelloWorldApp

Examples of version specifications that the java-version parameter will accept:

  • A major Java version

    e.g. 6, 7, 8, 9, 10, 11, 12, 13, ...

  • A semver Java version specification

    e.g. 8.0.232, 7.0.181, 11.0.4

    e.g. 8.0.x, >11.0.3, >=13.0.1, <8.0.212

  • An early access (EA) Java version

    e.g. 14-ea, 15-ea

    e.g. 14.0.0-ea, 15.0.0-ea

    e.g. 14.0.0-ea.28, 15.0.0-ea.2 (syntax for specifying an EA build number)

    Note that, per semver rules, EA builds will be matched by explicit EA version specifications.

  • 1.x syntax

    e.g. 1.8 (same as 8)

    e.g. 1.8.0.212 (same as 8.0.212)

Local file

steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1with:
java-version: '4.0.0'architecture: x64jdkFile: <path to jdkFile> # Optional - jdkFile to install java from. Useful for versions not found on Zulu Community CDN
- run: java -cp java HelloWorldApp

Matrix Testing

jobs:
build:
runs-on: ubuntu-16.04strategy:
matrix:
# test against latest update of each major Java version, as well as specific updates of LTS versions:java: [ 1.6, 6.0.83, 7, 7.0.181, 8, 8.0.192, 9.0.x, 10, 11.0.x, 11.0.3, 12, 13 ]name: Java ${{ matrix.java }} samplesteps:
- uses: actions/checkout@v2
- name: Setup javauses: actions/setup-java@v1with:
java-version: ${{ matrix.java }}
- run: java -cp java HelloWorldApp

Publishing using Apache Maven

jobs:
build:
runs-on: ubuntu-lateststeps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8uses: actions/setup-java@v1with:
java-version: 1.8
- name: Build with Mavenrun: mvn -B package --file pom.xml
- name: Publish to GitHub Packages Apache Mavenrun: mvn deployenv:
GITHUB_TOKEN: ${{ github.token }} # GITHUB_TOKEN is the default env for the password
- name: Set up Apache Maven Centraluses: actions/setup-java@v1with: # running setup-java again overwrites the settings.xmljava-version: 1.8server-id: maven # Value of the distributionManagement/repository/id field of the pom.xmlserver-username: MAVEN_USERNAME # env variable for username in deployserver-password: MAVEN_CENTRAL_TOKEN # env variable for token in deploy
- name: Publish to Apache Maven Centralrun: mvn deploy env:
MAVEN_USERNAME: maven_username123MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}

The two settings.xml files created from the above example look like the following.

settings.xml file created for the first deploy to GitHub Packages

<servers>
<server>
<id>github</id>
<username>${env.GITHUB_ACTOR}</username>
<password>${env.GITHUB_TOKEN}</password>
</server>
</servers>

settings.xml file created for the second deploy to Apache Maven Central

<servers>
<server>
<id>maven</id>
<username>${env.MAVEN_USERNAME}</username>
<password>${env.MAVEN_CENTRAL_TOKEN}</password>
</server>
</servers>

NOTE: The settings.xml file is created in the Actions $HOME directory. If you have an existing settings.xml file at that location, it will be overwritten. See below for using the settings-path to change your settings.xml file location.

See the help docs on Publishing a Package for more information on the pom.xml file.

Publishing using Gradle

jobs:
build:
runs-on: ubuntu-lateststeps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8uses: actions/setup-java@v1
- name: Build with Gradlerun: gradle build
- name: Publish to GitHub Packagesrun: gradle publishenv:
USERNAME: ${{ github.actor }}PASSWORD: ${{ secrets.GITHUB_TOKEN }}

NOTE: The USERNAME and PASSWORD need to correspond to the credentials environment variables used in the publishing section of your build.gradle.

See the help docs on Publishing a Package with Gradle for more information on the build.gradle configuration file.

Apache Maven with a settings path

When using an Actions self-hosted runner with multiple shared runners the default $HOME directory can be shared by a number runners at the same time which could overwrite existing settings file. Setting the settings-path variable allows you to choose a unique location for your settings file.

jobs:
build:
runs-on: ubuntu-lateststeps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8 for Shared Runneruses: actions/setup-java@v1with:
java-version: 1.8server-id: github # Value of the distributionManagement/repository/id field of the pom.xmlsettings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Build with Mavenrun: mvn -B package --file pom.xml
- name: Publish to GitHub Packages Apache Mavenrun: mvn deploy -s $GITHUB_WORKSPACE/settings.xmlenv:
GITHUB_TOKEN: ${{ github.token }}

License

The scripts and documentation in this project are released under the MIT License

Contributions

Contributions are welcome! See Contributor's Guide

About

Set up your GitHub Actions workflow with a specific version of Java

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages