At foojay.io we've spent some time creating a little api that should help you to discover builds of OpenJDK from different distributions in a general way. In this session, I will give a short introduction to what the Disco API is and how it can help you find the JDK/JRE of your choice. At the mo...
At foojay.io we've spent some time creating a little api that should help you to discover builds of OpenJDK from different distributions in a general way. In this session, I will give a short introduction to what the Disco API is and how it can help you find the JDK/JRE of your choice. At the moment Disco can help you getting builds from the following distributions: AdoptOpenJDK, Corretto, Dragonwell, GraalVM, Liberica, Liberica Native, Mandrel, Microsoft, OJDK Build, OpenLogic, Oracle, Oracle OpenJDK, RedHat, SAP Machine, Trava and Zulu. I will show examples on how to use the API and about plugins and tools that already use the API like browser extensions, ide plugins etc...
That who have the choice...
๏Adopt OpenJDK
๏Corretto
๏Dragonwell
๏(GraalVM CE)
๏Liberica
๏(Liberica Native)
๏(Mandrel)
๏Microsoft
๏OJDK Build
๏Open Logic
๏Oracle
๏Oracle OpenJDK
๏RedHat
๏SAP Machine
๏Temurin
๏Trava
๏Zulu
๏Zulu Prime
The situation...
๏We have many different distributions
๏Not all distributions support all versions
๏Most distributions are free but some are not
๏Some distributions have special features
๏Every distribution has it’s own way to get it
The Idea
What about having a
General API that…
Serves information about…
๏Distributions
๏Versions
๏Platforms
๏Operating Systems
๏Architectures
๏Archive types
๏Release status
๏Terms of support
๏Package types
๏Signatures
/major_versions?
๏ea=true (Early Access)
๏ga=true (General Availability)
๏maintained=true* (Actively maintained, at the moment 7, 8, 11, 13, 15, 16, 17-ea, 18-ea)
*will change over time
{
"result": [
{
"major_version": 17,
"term_of_support": "LTS",
"maintained": true,
"versions": [
"17-ea"
]
},
{
"major_version": 16,
"term_of_support": "STS",
"maintained": true,
"versions": [
"16-ea"
]
},
{
"major_version": 15,
"term_of_support": "MTS",
"maintained": true,
"versions": [
"15.0.1",
"15.0.1-ea",
"15",
"15-ea"
]
},
. . .
Returns a list of all
major versions
including early access
versions in a JSON
format
/major_versions
Latest JDK available
[
{
"id": "f5f69da2537cfbf7e6f26e484410b8d1 ",
"archive_type": "tar.gz",
"distribution": "zulu",
"major_version": 15,
"java_version": "15.0.1",
"distribution_version ": "15.28.51.0",
"latest_build_available ": true,
"release_status": "ga",
"term_of_support": "mts",
"operating_system": "linux",
"lib_c_type": "musl",
"architecture": "x64",
"package_type": "jdk",
"javafx_bundled": false,
"directly_downloadable ": true,
"filename": "zulu15.28.51-ca-jdk15.0.1-linux_musl_x64.tar.gz ",
"ephemeral_id": "339f5f69da2537cfbf7e6f26e484410b8d11610452685 "
},
{
"id": "aa4851ec455afb6efce8e4bd0a18ee63 ",
"archive_type": "zip",
"distribution": "zulu",
"major_version": 15,
. . .
Returns a list of all packages
found that contain a JDK and
have the latest available
version (here 15.0.1)
https://api.foojay.io/disco/v2.0/packages?package_type=jdk&latest=available
What versions are
available in
distribution XYZ ?
Versions available in distribution
{
"name": "Zulu",
"api_parameter": "zulu",
"versions": [
"17-ea",
"16-ea",
"15.0.1",
"15",
"15-ea",
"14.0.2",
"14.0.1",
"14",
"14-ea",
"13.0.5.1",
"13.0.5",
"13.0.4",
"13.0.3",
"13.0.2",
"13.0.1",
"13",
"12.0.2",
"12.0.1",
"12",
"11.0.9.1",
"11.0.9",
. . .
Returns a list of versions in
the Zulu distribution
including all it’s general
availability and early access
updates in JSON format
https://api.foojay.io/disco/v2.0/distributions/zulu
Who has
version
11.0.9.1 ?
Who has version 11.0.9.1
[
{
"id": "91b37ae0ab88863ba65845b2e1ba5a5d ",
"archive_type": "rpm",
"distribution": "zulu",
"major_version": 11,
"java_version": "11.0.9.1",
"distribution_version ": "11.43.55.0",
"latest_build_available ": true,
"release_status": "ga",
"term_of_support": "lts",
"operating_system": "linux",
"lib_c_type": "glibc",
"architecture": "x86",
"package_type": "jre",
"javafx_bundled": false,
"directly_downloadable ": true,
"filename": "zulu11.43.55-ca-jre11.0.9.1-linux.i686.rpm ",
"ephemeral_id": "34091b37ae0ab88863ba65845b2e1ba5a5d1610452754 "
},
{
"id": "f365a9db0f0a6954b0d4b53e5c42f797 ",
"archive_type": "zip",
"distribution": "zulu",
"major_version": 11,
. . .
Returns a list of all packages
that have the version number
11.0.9.1 from all distributions
https://api.foojay.io/disco/v2.0/packages?version=11.0.9.1
The latest LTS JDK
for Mac OS
incl. JavaFX ?
Latest LTS JDK for Mac incl. FX
[
{
"id": "75f55e22ca634f0a39bc88fcff49b9c1 ",
"archive_type": "tar.gz",
"distribution": "zulu",
"major_version": 11,
"java_version": "11.0.9.1",
"distribution_version ": "11.43.55.0",
"latest_build_available ": true,
"release_status": "ga",
"term_of_support": "lts",
"operating_system": "macos",
"lib_c_type": "libc",
"architecture": "x64",
"package_type": "jdk",
"javafx_bundled": true,
"directly_downloadable ": true,
"filename": "zulu11.43.55-ca-fx-jdk11.0.9.1-macosx_x64.tar.gz ",
"ephemeral_id": "41175f55e22ca634f0a39bc88fcff49b9c11610454032 "
},
{
"id": "3edab9b6f6661cc5a64ea19e439959e6 ",
"archive_type": "dmg",
"distribution": "zulu",
"major_version": 11,
. . .
Returns a list of all packages
that have the latest available
long term stable version (here
11.0.9.1) for Mac OS incl.
JavaFX from all distributions
https://api.foojay.io/disco/v2.0/packages?
version_by_definition=latest_lts&package_type=jdk&operating_system=macos&javafx_bundled=true&latest=per_version
Is there an update
available for 11.0.8 ?
Update available for 11.0.8
{
"major_version": 11,
"term_of_support": "LTS",
"maintained": true,
"versions": [
"11.0.9.1",
"11.0.9",
"11.0.8",
"11.0.7",
"11.0.6",
"11.0.5",
"11.0.4",
"11.0.3",
"11.0.2",
"11.0.1",
"11"
]
}
Returns a list of all general
availability updates of the
major version 11.
https://api.foojay.io/disco/v2.0/major_versions/11
JDK 1.8.0_275 for
Windows as msi
JDK 1.8.0_275 for Windows as msi
[
{
"id": "23310311f36f9092d8db58880dc55ec0 ",
"archive_type": "msi",
"distribution": "zulu",
"major_version": 8,
"java_version": "8.0.275",
"distribution_version ": "8.50.0.51",
"latest_build_available ": true,
"release_status": "ga",
"term_of_support": "lts",
"operating_system": "windows",
"lib_c_type": "c_std_lib",
"architecture": "x86",
"package_type": "jdk",
"javafx_bundled": false,
"directly_downloadable ": true,
"filename": "zulu8.50.0.51-ca-jdk8.0.275-win_i686.msi ",
"ephemeral_id": "32923310311f36f9092d8db58880dc55ec01610454148 "
},
{
"id": "949a657c47c2b71d58aebc0b022d4688 ",
"archive_type": "msi",
"distribution": "zulu",
"major_version": 8,
. . .
Returns a list of all packages
with the version 8.0.275 for
Windows with an archive type
of msi from all distributions
https://api.foojay.io/disco/v2.0/packages?
package_type=jdk&version=1.8.0_275&operating_system=windows&archive_type=msi
IDE plugins
Intellij
plugin
The plugin let you discover and download a
JDK to your local machine.
To install it, search for „DiscoIdea“ on the
Intellij Marketplace.
A plugin to discover/download a JDK
Intellij Plugin
Eclipse
plugin
The plugin let you discover and download a
JDK to your local machine.
To install it, search for „DiscoEclipse“ on the
Eclipse Marketplace.
A plugin to discover/download a JDK
Eclipse Plugin
NetBeans
plugin
NetBeans plugin
NetBeans plugin
NetBeans plugin
NetBeans plugin
NetBeans plugin
Visual Studio
Code
plugin
The plugin let you discover and
download a JDK to your local machine.
To install it, search for „DiscoVSC“ on
the Visual Studio Code Marketplace.
A plugin to discover/download a JDK
Visual Studio Code Plugin
Browser plugins
Chrome
extension
The extension let you discover and
download a JDK to your local machine.
To install it, search for „DiscoChrome“
on the chrome web store.
An extension to discover/download a JDK
Chrome Extension
Chrome Extension
Firefox
add-on
The extension let you discover and
download a JDK to your local machine.
To install it, search for „DiscoFox“ on
the firefox addons page.
An extension to discover/download a JDK
Firefox Add-on
Edge
extension
The extension let you discover and
download a JDK to your local machine.
To install it, search for „DiscoEdge“ on
the Edge plugins page.
An extension to discover/download a JDK
Edge Extension
Safari
extension
The extension let you discover and
download a JDK to your local machine.
To install it, search for „DiscoSafari“ on
the Mac app store.
An extension to discover/download a JDK
Safari Extension
Other plugins
Website
plugin
The snippet let you discover and download
a JDK to your local machine.
Find an instruction on how to install it for
example on blogger at Harmonic Code
A html snippet to discover/download a JDK
Website Plugin
Shell
scripts
$_
Scripts
๏disco-distributions.sh
๏disco-major-versions.sh
๏disco-packages.sh
jq needs to be installed!!!
disco-distribution.sh
################################
# #
# foojay jdk discovery api #
# #
# disco-distributions.sh #
# #
################################
Be aware that you need to have jq installed
Script parameters:
--version : Returns a list of distributions that support the given version
--name : Returns a distribution with the given name if available
--help : Shows this info
disco-distributions.sh
disco-distributions.sh --version 13.0.5.1
disco-releases.sh --help
Enables you to call the
distributions endpoint of the
disco api and retrieve results
in json format
bash disco-distributions.sh --help
disco-major-versions.sh
################################
# #
# foojay jdk discovery api #
# #
# disco-major-versions.sh #
# #
################################
Be aware that you need to have jq installed
Script parameters:
--help : Shows this info
--major-version : Major Version e.g. 1, 5, 9, 11, 18
disco-major-versions.sh
disco-major-versions.sh --maintained true --ea true --ga true
disco-major-versions.sh --ea true
disco-major-versions.sh --ga true
disco-major-versions.sh --version 11 --ea true
disco-major-versions.sh --version 11 --ga true
disco-major-verions.sh --help
Enables you to call the major
versions endpoint of the disco
api and retrieve results in json
format
bash disco-major-versions.sh --help
disco-packages.sh
################################
# #
# foojay jdk discovery api #
# #
# disco-packages.sh #
# #
################################
Be aware that you need to have jq and wget installed
Script parameters:
--help : Shows this info
--version : Version (mandatory or version by definition) e.g. 1.8.0_265 or 11 or 13.0.5.1
--version_by_definition : Version by definition (mandatory if no version) e.g. latest, latest_sts, latest_mts,
latest_lts
--distro : Distribution e.g. aoj, aoj_openj9, dragonwell, corretto, liberica,
oracle_open_jdk, redhat, sap_machine, zulu
--architecture : Architecture e.g. aarch64, arm, arm64, mips, ppc, ppc64, ppc64le,
riscv64, s390x, sparc, sparcv9, x64, x86, amd64
--archive_type : File extension e.g. cab, deb, dmg, exe, msi, pkg, rpm, tar, zip
--package_type : Package type e.g. jre, jdk
--operating_system : Operating System (mandatory) e.g. windows, macos, linux
--libc_type : Type of libc e.g. glibc, libc, musl, c_std_lib
--release_status : Release status e.g. ea, ga
--term_of_support : Term of support e.g. sts, mts, lts
--bitness : Bitness e.g. 32, 64
--javafx_bundled : With JavaFX e.g. true, false
--directly_downloadable : Directly downloadable e.g. true, false
--latest : Latest e.g. overall, per_distro
--dest : Destination e.g. /Users/HanSolo
Usage example:
disco-packages.sh --dest /Users/Hansolo --operating_system windows --version 1.8.0_265 --distro zulu --package_type jdk --
architecture x64 --archive_type zip --release_status ga
Enables you to call the
packages endpoint of the
disco api and retrieve results
in json format
bash disco-packages.sh --help
The tools makes use of the
Disco API to let you discover
JDK’s and download them to
your local machine.
A tool that let you discover JDK’s
JDK Butler
Get it from github
https://github.com/HanSolo/jdkbutler/releases
JDK Mon
The tool scans every 3h a
folder that you can define for
installed JDK’s.
It checks for available updates
using the Disco API and
offers the download of the
update.
A tool that monitors all your installed JDK’s
JDK Mon
Get it from github
https://github.com/HanSolo/JDKMon/releases
github actions
When using github actions to
build your project you can use
setup-java@v1.
This will use Zulu as JDK to
build and run.
setup-java@v1
github actions
...
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-package: jdk
java-version: 11.0.10
- name: Build with gradle
run: ./gradlew build
...
When using github actions to
build your project you can use
setup-java@v2.
No default and you only can
choose between adopt,
adopt-openj9 and zulu.
setup-java@v2
github actions
...
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-package: jdk
java-version: '11.0.10'
distribution: 'zulu'
- name: Build with gradle
run: ./gradlew build
...
Make use of foojay’s setup-
java@disco to build your code
using the JDK of your choice.
If not defined it will default to
Zulu (as it was in [email protected]).
Use foojay2020/setup-java@disco
github actions
...
steps:
- uses: actions/checkout@v1
- name: Set up JDK 11 Corretto
uses: foojay2020/setup-java@disco
with:
java-package: jdk
java-version: 11.0.10
distro: corretto
- name: Build with gradle
run: ./gradlew build
...
We have created a testing
matrix for the Disco API using
github actions. To check what
is available you can simply
take a look at the actions in
the project.
What is available? Check Disco Testing Matrix
github actions
Check it out on github
https://github.com/foojay2020/discoTestingMatrix