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...
16. 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
17. 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
30. {
"result": [
{
"name": "Zulu",
"api_parameter": "zulu",
"hash_algorithm": "",
"hash_uri": "",
"signature_type": "",
"signature_algorithm": "",
"signature_uri": "",
"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",
"11.0.8",
"11.0.7",
"11.0.6",
...
Returns info about a
speci
fi
c distribution
including all it’s general
availability and early
access updates in
JSON format
/distributions/zulu
41. 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
43. 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
45. 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_de
fi
nition=latest_lts&package_type=jdk&operating_system=macos&javafx_bundled=true&latest=per_version
47. 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
49. 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
52. 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
54. 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
62. 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
65. 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
68. The extension let you discover and
download a JDK to your local machine.
To install it, search for „DiscoFox“ on
the
fi
refox addons page.
An extension to discover/download a JDK
Firefox Add-on
70. 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
72. 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
75. 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
78. 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
79. 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
80. 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
84. 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
85. Get it from github
https://github.com/HanSolo/jdkbutler/releases
87. The tool scans every 3h a
folder that you can de
fi
ne 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
88. Get it from github
https://github.com/HanSolo/JDKMon/releases
90. 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
...
91. 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
...
92. Make use of foojay’s setup-
java@disco to build your code
using the JDK of your choice.
If not de
fi
ned it will default to
Zulu (as it was in setup-java@v1.0).
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
...
93. 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
94. Check it out on github
https://github.com/foojay2020/discoTestingMatrix