The setup-java
action provides the following functionality for GitHub Actions runners:
- Downloading and setting up a requested version of Java. See Usage for a list of supported distributions.
- Extracting and caching custom version of Java from a local file.
- Configuring runner for publishing using Apache Maven.
- Configuring runner for publishing using Gradle.
- Configuring runner for using GPG private key.
- Registering problem matchers for error output.
- Caching dependencies managed by Apache Maven.
- Caching dependencies managed by Gradle.
- Caching dependencies managed by sbt.
- Maven Toolchains declaration for specified JDK versions.
This action allows you to work with Java and Scala projects.
- V2 supports custom distributions and provides support for Azul Zulu OpenJDK, Eclipse Temurin and AdoptOpenJDK out of the box. V1 supports only Azul Zulu OpenJDK.
- V2 requires you to specify distribution along with the version. V1 defaults to Azul Zulu OpenJDK, only version input is required. Follow the migration guide to switch from V1 to V2.
-
java-version
: The Java version that is going to be set up. Takes a whole or semver Java version. If not specified, the action will expectjava-version-file
input to be specified. -
java-version-file
: The path to the.java-version
file. See more details in about.java-version
file. -
distribution
: (required) Java distribution. -
java-package
: The packaging variant of the chosen distribution. Possible values:jdk
,jre
,jdk+fx
,jre+fx
. Default value:jdk
. -
architecture
: The target architecture of the package. Possible values:x86
,x64
,armv7
,aarch64
,ppc64le
. Default value: Derived from the runner machine. -
jdkFile
: If a use-case requires a custom distribution setup-java uses the compressed JDK from the location pointed by this input and will take care of the installation and caching on the VM. -
check-latest
: Setting this option makes the action to check for the latest available version for the version spec. -
cache
: Quick setup caching for the dependencies managed through one of the predefined package managers. It can be one of "maven", "gradle" or "sbt". -
cache-dependency-path
: The path to a dependency file: pom.xml, build.gradle, build.sbt, etc. This option can be used with thecache
option. If this option is omitted, the action searches for the dependency file in the entire repository. This option supports wildcards and a list of file names for caching multiple dependencies.
The action has a bunch of inputs to generate maven's settings.xml on the fly and pass the values to Apache Maven GPG Plugin as well as Apache Maven Toolchains. See advanced usage for more.
-
overwrite-settings
: By default action overwrites the settings.xml. In order to skip generation of file if it exists, set this tofalse
. -
server-id
: ID of the distributionManagement repository in the pom.xml file. Default isgithub
. -
server-username
: Environment variable name for the username for authentication to the Apache Maven repository. Default is GITHUB_ACTOR. -
server-password
: Environment variable name for password or token for authentication to the Apache Maven repository. Default is GITHUB_TOKEN. -
settings-path
: Maven related setting to point to the directory where the settings.xml file will be written. Default is ~/.m2. -
gpg-private-key
: GPG private key to import. Default is empty string. -
gpg-passphrase
: Environment variable name for the GPG private key passphrase. Default is GPG_PASSPHRASE. -
mvn-toolchain-id
: Name of Maven Toolchain ID if the default name of${distribution}_${java-version}
is not wanted. -
mvn-toolchain-vendor
: Name of Maven Toolchain Vendor if the default name of${distribution}
is not wanted.
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '17'
- run: java HelloWorldApp.java
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'zulu' # See 'Supported distributions' for available options
java-version: '17'
- run: java HelloWorldApp.java
The java-version
input supports an exact version or a version range using SemVer notation:
- major versions:
8
,11
,16
,17
- more specific versions:
17.0
,11.0
,11.0.4
,8.0.232
,8.0.282+8
- early access (EA) versions:
15-ea
,15.0.0-ea
,15.0.0-ea.2
,15.0.0+2-ea
Currently, the following distributions are supported:
Keyword | Distribution | Official site | License |
---|---|---|---|
temurin |
Eclipse Temurin | Link | Link |
zulu |
Azul Zulu OpenJDK | Link | Link |
adopt or adopt-hotspot |
AdoptOpenJDK Hotspot | Link | Link |
adopt-openj9 |
AdoptOpenJDK OpenJ9 | Link | Link |
liberica |
Liberica JDK | Link | Link |
microsoft |
Microsoft Build of OpenJDK | Link | Link |
corretto |
Amazon Corretto Build of OpenJDK | Link | Link |
semeru |
IBM Semeru Runtime Open Edition | Link | Link |
oracle |
Oracle JDK | Link | Link |
dragonwell |
Alibaba Dragonwell JDK | Link | Link |
NOTE: The different distributors can provide discrepant list of available versions / supported configurations. Please refer to the official documentation to see the list of supported versions.
NOTE: AdoptOpenJDK got moved to Eclipse Temurin and won't be updated anymore. It is highly recommended to migrate workflows from adopt
and adopt-openj9
, to temurin
and semeru
respectively, to keep receiving software and security updates. See more details in the Good-bye AdoptOpenJDK post.
NOTE: For Azul Zulu OpenJDK architectures x64 and arm64 are mapped to x86 / arm with proper hw_bitness.
The action has a built-in functionality for caching and restoring dependencies. It uses toolkit/cache under hood for caching dependencies but requires less configuration settings. Supported package managers are gradle, maven and sbt. The format of the used cache key is setup-java-${{ platform }}-${{ packageManager }}-${{ fileHash }}
, where the hash is based on the following files:
- gradle:
**/*.gradle*
,**/gradle-wrapper.properties
,buildSrc/**/Versions.kt
,buildSrc/**/Dependencies.kt
,gradle/*.versions.toml
, and**/versions.properties
- maven:
**/pom.xml
- sbt: all sbt build definition files
**/*.sbt
,**/project/build.properties
,**/project/**.scala
,**/project/**.sbt
When the option cache-dependency-path
is specified, the hash is based on the matching file. This option supports wildcards and a list of file names, and is especially useful for monorepos.
The workflow output cache-hit
is set to indicate if an exact match was found for the key as actions/cache does.
The cache input is optional, and caching is turned off by default.
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
cache: 'gradle'
cache-dependency-path: | # optional
sub-project/*.gradle*
sub-project/**/gradle-wrapper.properties
- run: ./gradlew build --no-daemon
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
cache: 'maven'
cache-dependency-path: 'sub-project/pom.xml' # optional
- name: Build with Maven
run: mvn -B package --file pom.xml
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
cache: 'sbt'
cache-dependency-path: | # optional
sub-project/build.sbt
sub-project/project/build.properties
- name: Build with SBT
run: sbt package
Usually, cache gets downloaded in multiple segments of fixed sizes. Sometimes, a segment download gets stuck, which causes the workflow job to be stuck. The cache segment download timeout