2019-07-16 13:28:00 -04:00
# setup-java
2019-08-12 15:12:48 -04:00
< p align = "left" >
< a href = "https://github.com/actions/setup-java" > < img alt = "GitHub Actions status" src = "https://github.com/actions/setup-java/workflows/Main%20workflow/badge.svg" > < / a >
< / p >
2019-07-17 10:56:53 -04:00
This action sets up a java environment for use in actions by:
2019-11-03 00:39:35 -04:00
- 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 ](http://static.azul.com/zulu/bin/ )
2019-07-17 10:56:53 -04:00
- registering problem matchers for error output
# Usage
See [action.yml ](action.yml )
2019-12-10 12:37:07 -05:00
## Basic
2019-07-17 10:56:53 -04:00
```yaml
2019-07-25 21:24:28 -04:00
steps:
2020-01-30 19:52:07 -05:00
- uses: actions/checkout@v2
2019-08-01 09:40:31 -04:00
- uses: actions/setup-java@v1
2019-07-17 10:56:53 -04:00
with:
2020-01-09 03:45:37 -05:00
java-version: '9.0.4' # The JDK version to make available on the path.
2019-11-22 16:26:10 -05:00
java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
architecture: x64 # (x64 or x86) - defaults to x64
2019-07-17 10:56:53 -04:00
- run: java -cp java HelloWorldApp
```
2020-01-09 03:45:37 -05:00
Examples of version specifications that the java-version parameter will accept:
2020-01-09 03:49:07 -05:00
- A major Java version
2020-01-09 03:45:37 -05:00
e.g. ```6, 7, 8, 9, 10, 11, 12, 13, ...```
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
- A semver Java version specification
e.g. ```8.0.232, 7.0.181, 11.0.4```
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
e.g. ```8.0.x, >11.0.3, >=13.0.1, < 8.0.212 ` ` `
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
- An early access (EA) Java version
e.g. ```14-ea, 15-ea```
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
e.g. ```14.0.0-ea, 15.0.0-ea```
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
e.g. ```14.0.0-ea.28, 15.0.0-ea.2``` (syntax for specifying an EA build number)
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
Note that, per semver rules, EA builds will be matched by explicit EA version specifications.
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
- 1.x syntax
e.g. ```1.8``` (same as ```8```)
2020-05-02 07:33:15 -04:00
2020-01-09 03:45:37 -05:00
e.g. ```1.8.0.212``` (same as ```8.0.212```)
2019-07-17 10:56:53 -04:00
2019-12-10 12:37:07 -05:00
## Local file
2019-07-17 10:56:53 -04:00
```yaml
2019-07-25 21:24:28 -04:00
steps:
2020-01-30 19:52:07 -05:00
- uses: actions/checkout@v2
2019-08-01 09:40:31 -04:00
- uses: actions/setup-java@v1
2019-07-17 10:56:53 -04:00
with:
2019-08-13 16:24:39 -04:00
java-version: '4.0.0'
2019-07-17 10:56:53 -04:00
architecture: x64
2019-11-03 00:39:35 -04:00
jdkFile: < path to jdkFile > # Optional - jdkFile to install java from. Useful for versions not found on Zulu Community CDN
2019-07-17 10:56:53 -04:00
- run: java -cp java HelloWorldApp
```
2019-12-10 12:37:07 -05:00
## Matrix Testing
2019-07-17 10:56:53 -04:00
```yaml
jobs:
build:
2019-08-01 11:06:31 -04:00
runs-on: ubuntu-16.04
2019-07-17 10:56:53 -04:00
strategy:
matrix:
2019-11-03 00:39:35 -04:00
# test against latest update of each major Java version, as well as specific updates of LTS versions:
2019-11-30 01:53:14 -05:00
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 ]
2019-07-17 10:56:53 -04:00
name: Java ${{ matrix.java }} sample
2019-07-25 21:24:28 -04:00
steps:
2020-01-30 19:52:07 -05:00
- uses: actions/checkout@v2
2019-07-17 10:56:53 -04:00
- name: Setup java
2019-08-01 09:40:31 -04:00
uses: actions/setup-java@v1
2019-07-17 10:56:53 -04:00
with:
2019-08-13 16:24:39 -04:00
java-version: ${{ matrix.java }}
2019-07-17 10:56:53 -04:00
- run: java -cp java HelloWorldApp
```
2019-12-10 12:37:07 -05:00
## Publishing using Apache Maven
2019-11-28 17:13:35 -05:00
```yaml
jobs:
build:
runs-on: ubuntu-latest
steps:
2020-01-30 19:52:07 -05:00
- uses: actions/checkout@v2
2019-11-28 17:13:35 -05:00
- name: Set up JDK 1.8
2019-12-04 23:22:47 -05:00
uses: actions/setup-java@v1
2019-11-28 17:13:35 -05:00
with:
java-version: 1.8
2019-12-19 11:52:26 -05:00
2019-11-28 17:13:35 -05:00
- name: Build with Maven
run: mvn -B package --file pom.xml
2019-12-19 11:52:26 -05:00
2019-11-28 17:13:35 -05:00
- name: Publish to GitHub Packages Apache Maven
run: mvn deploy
2019-12-19 18:39:48 -05:00
env:
GITHUB_TOKEN: ${{ github.token }} # GITHUB_TOKEN is the default env for the password
2019-12-19 11:52:26 -05:00
2019-11-29 12:26:29 -05:00
- name: Set up Apache Maven Central
2019-12-04 23:22:47 -05:00
uses: actions/setup-java@v1
2019-11-29 12:26:29 -05:00
with: # running setup-java again overwrites the settings.xml
java-version: 1.8
2019-12-19 14:28:11 -05:00
server-id: maven # Value of the distributionManagement/repository/id field of the pom.xml
2019-12-19 18:39:48 -05:00
server-username: MAVEN_USERNAME # env variable for username in deploy
server-password: MAVEN_CENTRAL_TOKEN # env variable for token in deploy
2020-05-02 07:33:15 -04:00
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
2019-12-19 11:52:26 -05:00
2019-11-29 12:26:29 -05:00
- name: Publish to Apache Maven Central
2020-05-02 07:33:15 -04:00
run: mvn deploy
2019-12-19 18:39:48 -05:00
env:
MAVEN_USERNAME: maven_username123
2019-12-19 18:44:10 -05:00
MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
2020-05-02 07:33:15 -04:00
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
2019-12-19 18:44:10 -05:00
```
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
```xml
2020-05-02 07:33:15 -04:00
< settings xmlns = "http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
< servers >
2019-12-19 18:44:10 -05:00
< server >
< id > github< / id >
< username > ${env.GITHUB_ACTOR}< / username >
< password > ${env.GITHUB_TOKEN}< / password >
< / server >
2020-05-02 07:33:15 -04:00
< server >
< id > gpg.passphrase< / id >
< passphrase > ${env.GPG_PASSPHRASE}< / passphrase >
< / server >
< / servers >
< / settings >
2019-12-19 18:44:10 -05:00
```
`settings.xml` file created for the second deploy to Apache Maven Central
```xml
2020-05-02 07:33:15 -04:00
< settings xmlns = "http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
< servers >
2019-12-19 18:44:10 -05:00
< server >
< id > maven< / id >
< username > ${env.MAVEN_USERNAME}< / username >
< password > ${env.MAVEN_CENTRAL_TOKEN}< / password >
< / server >
2020-05-02 07:33:15 -04:00
< server >
< id > gpg.passphrase< / id >
< passphrase > ${env.MAVEN_GPG_PASSPHRASE}< / passphrase >
< / server >
< / servers >
< / settings >
2019-11-28 17:13:35 -05:00
```
2019-12-06 14:50:30 -05:00
2020-05-02 07:33:15 -04:00
***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.***
2019-12-06 14:50:30 -05:00
2019-11-28 17:52:51 -05:00
See the help docs on [Publishing a Package ](https://help.github.com/en/github/managing-packages-with-github-packages/configuring-apache-maven-for-use-with-github-packages#publishing-a-package ) for more information on the `pom.xml` file.
2019-11-28 17:13:35 -05:00
2019-12-10 12:37:07 -05:00
## Publishing using Gradle
2019-12-06 16:21:27 -05:00
```yaml
jobs:
build:
runs-on: ubuntu-latest
steps:
2020-01-30 19:52:07 -05:00
- uses: actions/checkout@v2
2019-12-06 16:21:27 -05:00
- name: Set up JDK 1.8
uses: actions/setup-java@v1
- name: Build with Gradle
run: gradle build
- name: Publish to GitHub Packages
run: gradle publish
env:
USERNAME: ${{ github.actor }}
PASSWORD: ${{ secrets.GITHUB_TOKEN }}
```
2020-05-02 07:33:15 -04:00
***NOTE: The `USERNAME` and `PASSWORD` need to correspond to the credentials environment variables used in the publishing section of your `build.gradle` .***
2019-12-06 16:21:27 -05:00
See the help docs on [Publishing a Package with Gradle ](https://help.github.com/en/github/managing-packages-with-github-packages/configuring-gradle-for-use-with-github-packages#example-using-gradle-groovy-for-a-single-package-in-a-repository ) for more information on the `build.gradle` configuration file.
2019-12-10 17:25:15 -05:00
## Apache Maven with a settings path
2019-12-10 12:37:07 -05:00
2019-12-10 16:02:21 -05:00
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.
2019-12-10 12:37:07 -05:00
```yaml
jobs:
build:
runs-on: ubuntu-latest
steps:
2020-01-30 19:52:07 -05:00
- uses: actions/checkout@v2
2019-12-10 12:37:07 -05:00
- name: Set up JDK 1.8 for Shared Runner
uses: actions/setup-java@v1
with:
java-version: 1.8
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
2019-12-10 17:25:15 -05:00
settings-path: ${{ github.workspace }} # location for the settings.xml file
2019-12-19 11:52:26 -05:00
2019-12-10 12:37:07 -05:00
- name: Build with Maven
run: mvn -B package --file pom.xml
2019-12-19 11:52:26 -05:00
2019-12-10 12:37:07 -05:00
- name: Publish to GitHub Packages Apache Maven
2019-12-10 17:25:15 -05:00
run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml
2019-12-19 18:39:48 -05:00
env:
GITHUB_TOKEN: ${{ github.token }}
2019-12-10 12:37:07 -05:00
```
2019-07-17 10:56:53 -04:00
# License
The scripts and documentation in this project are released under the [MIT License ](LICENSE )
# Contributions
Contributions are welcome! See [Contributor's Guide ](docs/contributors.md )