# setup-java
This action provides the following functionality for GitHub Actions runners: - Downloading and setting up a requested version of Java. See [Usage](#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 ## V2 vs V1 - V2 supports custom distributions and provides support for Zulu OpenJDK and Adopt OpenJDK out of the box. V1 supports only Zulu OpenJDK - V2 requires you to specify distribution along with the version. V1 defaults to Zulu OpenJDK, only version input is required. Follow [the migration guide](docs/switching-to-v2.md) to switch from V1 to V2 ## Usage Inputs `java-version` and `distribution` are mandatory. See [Supported distributions](../README.md#Supported-distributions) section for a list of available options. ### Basic **Adopt OpenJDK** ```yaml steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v2-preview with: distribution: 'adopt' # See 'Supported distributions' for available options java-version: '11' - run: java -cp java HelloWorldApp ``` **Zulu OpenJDK** ```yaml steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v2-preview with: distribution: 'zulu' # See 'Supported distributions' for available options java-version: '11' - run: java -cp java HelloWorldApp ``` #### Supported version syntax The `java-version` input supports an exact version or a version range using [SemVer](https://semver.org/) notation: - major versions: `8`, `11`, `15` - more specific versions: `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` **Note:** 4-digit notation will always force action to skip checking pre-cached versions and download version in runtime. #### Supported distributions Currently, the following distributions are supported: | Keyword | Distribution | Official site | License | |-|-|-|-| | `zulu` | Zulu OpenJDK | [Link](https://www.azul.com/downloads/zulu-community/?package=jdk) | [Link](https://www.azul.com/products/zulu-and-zulu-enterprise/zulu-terms-of-use/) | | `adopt` | Adopt OpenJDK | [Link](https://adoptopenjdk.net/) | [Link](https://adoptopenjdk.net/about.html) **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. ### Check latest In the basic examples above, the `check-latest` flag defaults to `false`. When set to `false`, the action tries to first resolve a version of Java from the local cache. If unable to find a specific version in the cache, the action will download a version of Java. Use the default or set `check-latest` to `false` if you prefer stability and if you want to ensure a specific version of Java is always used. The local version of Java in cache gets updated on weekly basis. For information regarding locally cached versions of Java on GitHub hosted runners, check out [GitHub Actions Virtual Environments](https://github.com/actions/virtual-environments). If `check-latest` is set to `true`, the action first checks if the cached version is the latest one. If the locally cached version is not the most up-to-date, the latest version of Java will be downloaded. Set `check-latest` to `true` if you want the most up-to-date version of Java to always be used. Setting `check-latest` to `true` has performance implications as downloading versions of Java is slower than using cached versions. ```yaml steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v2-preview with: distribution: 'adopt' java-version: '11' check-latest: true - run: java -cp java HelloWorldApp ``` ### Testing against different Java versions ```yaml jobs: build: runs-on: ubuntu-20.04 strategy: matrix: java: [ '8', '11', '13', '15' ] name: Java ${{ matrix.Java }} sample steps: - uses: actions/checkout@v2 - name: Setup java uses: actions/setup-java@v2-preview with: distribution: '