├── .github ├── CODEOWNERS ├── dependabot.yml └── workflows │ ├── jenkins-security-scan.yml │ └── cd.yaml ├── .mvn ├── maven.config └── extensions.xml ├── src ├── test │ ├── resources │ │ ├── __files │ │ │ ├── Win.zip │ │ │ ├── Mac.tar.gz │ │ │ └── Linux.tar.gz │ │ ├── io │ │ │ └── jenkins │ │ │ │ └── plugins │ │ │ │ └── adoptopenjdk │ │ │ │ ├── alpine-os-release │ │ │ │ └── ubuntu-os-release │ │ └── io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller │ └── java │ │ └── io │ │ └── jenkins │ │ └── plugins │ │ └── adoptopenjdk │ │ ├── AdoptOpenJDKInstallerAlpineTest.java │ │ └── AdoptOpenJDKInstallerTest.java └── main │ ├── resources │ ├── index.jelly │ └── io │ │ └── jenkins │ │ └── plugins │ │ └── adoptopenjdk │ │ ├── AdoptOpenJDKInstaller │ │ ├── help.html │ │ └── config.jelly │ │ └── Messages.properties │ ├── webapp │ └── version.html │ └── java │ └── io │ └── jenkins │ └── plugins │ └── adoptopenjdk │ └── AdoptOpenJDKInstaller.java ├── .gitignore ├── Jenkinsfile ├── LICENSE.txt ├── pom.xml └── README.md /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @jenkinsci/adoptopenjdk-plugin-developers 2 | -------------------------------------------------------------------------------- /.mvn/maven.config: -------------------------------------------------------------------------------- 1 | -Pconsume-incrementals 2 | -Pmight-produce-incrementals 3 | -Dchangelist.format=%d.v%s 4 | -------------------------------------------------------------------------------- /src/test/resources/__files/Win.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/adoptopenjdk-plugin/master/src/test/resources/__files/Win.zip -------------------------------------------------------------------------------- /src/test/resources/__files/Mac.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/adoptopenjdk-plugin/master/src/test/resources/__files/Mac.tar.gz -------------------------------------------------------------------------------- /src/test/resources/__files/Linux.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/adoptopenjdk-plugin/master/src/test/resources/__files/Linux.tar.gz -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | 3 | # mvn hpi:run 4 | work 5 | 6 | # IntelliJ IDEA project files 7 | *.iml 8 | *.iws 9 | *.ipr 10 | .idea 11 | 12 | # Eclipse project files 13 | .settings 14 | .classpath 15 | .project 16 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | /* 2 | * See the documentation for more options: 3 | * https://github.com/jenkins-infra/pipeline-library/ 4 | */ 5 | buildPlugin(useContainerAgent: true, configurations: [ 6 | [ platform: 'linux', jdk: 25 ], 7 | [ platform: 'windows', jdk: 21 ], 8 | ]) 9 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/adoptopenjdk/alpine-os-release: -------------------------------------------------------------------------------- 1 | NAME="Alpine Linux" 2 | ID=alpine 3 | VERSION_ID=3.22.0 4 | PRETTY_NAME="Alpine Linux v3.22" 5 | HOME_URL="https://alpinelinux.org/" 6 | BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues" 7 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates 2 | --- 3 | version: 2 4 | updates: 5 | - package-ecosystem: maven 6 | directory: / 7 | schedule: 8 | interval: monthly 9 | - package-ecosystem: github-actions 10 | directory: / 11 | schedule: 12 | interval: monthly 13 | -------------------------------------------------------------------------------- /.mvn/extensions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | io.jenkins.tools.incrementals 4 | git-changelist-maven-extension 5 | 1.13 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/adoptopenjdk/ubuntu-os-release: -------------------------------------------------------------------------------- 1 | PRETTY_NAME="Ubuntu 24.04.2 LTS" 2 | NAME="Ubuntu" 3 | VERSION_ID="24.04" 4 | VERSION="24.04.2 LTS (Noble Numbat)" 5 | VERSION_CODENAME=noble 6 | ID=ubuntu 7 | ID_LIKE=debian 8 | HOME_URL="https://www.ubuntu.com/" 9 | SUPPORT_URL="https://help.ubuntu.com/" 10 | BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" 11 | PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" 12 | UBUNTU_CODENAME=noble 13 | LOGO=ubuntu-logo 14 | -------------------------------------------------------------------------------- /.github/workflows/jenkins-security-scan.yml: -------------------------------------------------------------------------------- 1 | # Jenkins Security Scan 2 | # For more information, see: https://www.jenkins.io/doc/developer/security/scan/ 3 | 4 | name: Jenkins Security Scan 5 | 6 | on: 7 | push: 8 | branches: 9 | - master 10 | pull_request: 11 | types: [opened, synchronize, reopened] 12 | workflow_dispatch: 13 | 14 | permissions: 15 | security-events: write 16 | contents: read 17 | actions: read 18 | 19 | jobs: 20 | security-scan: 21 | uses: jenkins-infra/jenkins-security-scan/.github/workflows/jenkins-security-scan.yaml@v2 22 | with: 23 | java-cache: 'maven' # Optionally enable use of a build dependency cache. Specify 'maven' or 'gradle' as appropriate. 24 | # java-version: 21 # Optionally specify what version of Java to set up for the build, or remove to use a recent default. 25 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 - 2019, Mads Mohr Christensen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main/resources/index.jelly: -------------------------------------------------------------------------------- 1 | 26 | 27 |
28 | Provides an installer for the JDK tool that downloads the Eclipse Temurin™ build based upon OpenJDK from the Adoptium Working Group. 29 |
30 | -------------------------------------------------------------------------------- /src/main/webapp/version.html: -------------------------------------------------------------------------------- 1 | 26 |
27 |

HotSpot is the Java virtual machine from the OpenJDK community. It is the most widely used VM today. It is suitable for all workloads.

28 | 29 |

For more details see OpenJDK HotSpot.

30 |
-------------------------------------------------------------------------------- /src/main/resources/io/jenkins/plugins/adoptopenjdk/AdoptOpenJDKInstaller/help.html: -------------------------------------------------------------------------------- 1 | 26 |
27 | This installation method relies on a third-party service and may 28 | break at any time without notice. Instead, consider preinstalling a JDK on 29 | agents, using images that already include a JDK, or downloading the desired 30 | JDK manually and configuring the Extract *.zip/*.tar.gz installer. 31 |
-------------------------------------------------------------------------------- /.github/workflows/cd.yaml: -------------------------------------------------------------------------------- 1 | # Note: additional setup is required, see https://www.jenkins.io/redirect/continuous-delivery-of-plugins 2 | # 3 | # Please find additional hints for individual trigger use case 4 | # configuration options inline this script below. 5 | # 6 | --- 7 | name: cd 8 | on: 9 | workflow_dispatch: 10 | inputs: 11 | validate_only: 12 | required: false 13 | type: boolean 14 | description: | 15 | Run validation with release drafter only 16 | → Skip the release job 17 | # Note: Change this default to true, 18 | # if the checkbox should be checked by default. 19 | default: false 20 | # If you don't want any automatic trigger in general, then 21 | # the following check_run trigger lines should all be commented. 22 | # Note: Consider the use case #2 config for 'validate_only' below 23 | # as an alternative option! 24 | check_run: 25 | types: 26 | - completed 27 | 28 | permissions: 29 | checks: read 30 | contents: write 31 | 32 | jobs: 33 | maven-cd: 34 | uses: jenkins-infra/github-reusable-workflows/.github/workflows/maven-cd.yml@v1 35 | with: 36 | # Comment / uncomment the validate_only config appropriate to your preference: 37 | # 38 | # Use case #1 (automatic release): 39 | # - Let any successful Jenkins build trigger another release, 40 | # if there are merged pull requests of interest 41 | # - Perform a validation only run with drafting a release note, 42 | # if manually triggered AND inputs.validate_only has been checked. 43 | # 44 | validate_only: ${{ inputs.validate_only == true }} 45 | # 46 | # Alternative use case #2 (no automatic release): 47 | # - Same as use case #1 - but: 48 | # - Let any check_run trigger a validate_only run. 49 | # => enforce the release job to be skipped. 50 | # 51 | #validate_only: ${{ inputs.validate_only == true || github.event_name == 'check_run' }} 52 | secrets: 53 | MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} 54 | MAVEN_TOKEN: ${{ secrets.MAVEN_TOKEN }} 55 | -------------------------------------------------------------------------------- /src/main/resources/io/jenkins/plugins/adoptopenjdk/AdoptOpenJDKInstaller/config.jelly: -------------------------------------------------------------------------------- 1 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/main/resources/io/jenkins/plugins/adoptopenjdk/Messages.properties: -------------------------------------------------------------------------------- 1 | ### 2 | # #%L 3 | # Eclipse Temurin installer Plugin 4 | # %% 5 | # Copyright (C) 2016 - 2019 Mads Mohr Christensen 6 | # %% 7 | # Permission is hereby granted, free of charge, to any person obtaining a copy 8 | # of this software and associated documentation files (the "Software"), to deal 9 | # in the Software without restriction, including without limitation the rights 10 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | # copies of the Software, and to permit persons to whom the Software is 12 | # furnished to do so, subject to the following conditions: 13 | # 14 | # The above copyright notice and this permission notice shall be included in 15 | # all copies or substantial portions of the Software. 16 | # 17 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | # THE SOFTWARE. 24 | # #L% 25 | ### 26 | AdoptOpenJDKInstaller.DescriptorImpl.DisplayName=Install from adoptium.net 27 | 28 | AdoptOpenJDKInstaller.getAdoptOpenJDKFamilyList.NoDownloadable=AdoptOpenJDKList is not registered as a Downloadable 29 | 30 | AdoptOpenJDKInstaller.performInstallation.emptyJdkFamilyList=Unable to download release list 31 | AdoptOpenJDKInstaller.performInstallation.releaseNotFound=Unable to locate release: {0} 32 | AdoptOpenJDKInstaller.performInstallation.binaryNotFound=Unable to locate binary. A release might not exist for the selected combination. ID: {0}, Platform: {1}, CPU: {2} 33 | AdoptOpenJDKInstaller.performInstallation.JdkSkipped=Eclipse Temurin installation skipped: {0} 34 | AdoptOpenJDKInstaller.performInstallation.path=Installing Eclipse Temurin to {0} 35 | AdoptOpenJDKInstaller.performInstallation.fromCache=Installing Eclipse Temurin from {0} to {1} on {2} 36 | AdoptOpenJDKInstaller.performInstallation.failedToUnpack=Failed to unpack {0} ({1} bytes read) 37 | 38 | AdoptOpenJDKInstaller.Platform.nullChannel=Channel is null, cannot determine Platform of: {0} 39 | AdoptOpenJDKInstaller.Platform.unknownPlatform=Unknown Platform name: {0} 40 | 41 | AdoptOpenJDKInstaller.CPU.nullChannel=Channel is null, cannot determine CPU of: {0} 42 | AdoptOpenJDKInstaller.CPU.unknownCpu=Unknown CPU architecture: {0} 43 | 44 | AdoptOpenJDKInstaller.AdoptOpenJDKRelease.usupportedCpu=Unsupported CPU architecture: {0} 45 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 27 | 28 | 4.0.0 29 | 30 | org.jenkins-ci.plugins 31 | plugin 32 | 5.28 33 | 34 | 35 | io.jenkins.plugins 36 | adoptopenjdk 37 | ${changelist} 38 | hpi 39 | Eclipse Temurin installer Plugin 40 | 41 | https://github.com/jenkinsci/${project.artifactId}-plugin 42 | 43 | 44 | MIT License 45 | https://opensource.org/licenses/MIT 46 | 47 | 48 | 49 | 50 | scm:git:https://github.com/${gitHubRepo}.git 51 | scm:git:git@github.com:${gitHubRepo}.git 52 | ${scmTag} 53 | https://github.com/${gitHubRepo} 54 | 55 | 56 | 57 | 999999-SNAPSHOT 58 | 59 | true 60 | 61 | 2.479 62 | ${jenkins.baseline}.3 63 | jenkinsci/${project.artifactId}-plugin 64 | false 65 | false 66 | 67 | 68 | 69 | 70 | 71 | io.jenkins.tools.bom 72 | bom-${jenkins.baseline}.x 73 | 5054.v620b_5d2b_d5e6 74 | pom 75 | import 76 | 77 | 78 | 79 | 80 | 81 | 82 | org.wiremock 83 | wiremock-standalone 84 | 3.13.1 85 | test 86 | 87 | 88 | 89 | 90 | 91 | repo.jenkins-ci.org 92 | https://repo.jenkins-ci.org/public/ 93 | 94 | 95 | 96 | 97 | repo.jenkins-ci.org 98 | https://repo.jenkins-ci.org/public/ 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/adoptopenjdk/AdoptOpenJDKInstallerAlpineTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * The MIT License 3 | * 4 | * Copyright 2025 Mark Waite. 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the "Software"), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in 14 | * all copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | * THE SOFTWARE. 23 | */ 24 | package io.jenkins.plugins.adoptopenjdk; 25 | 26 | import static hudson.Functions.isWindows; 27 | import static io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller.Platform.AIX; 28 | import static io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller.Platform.ALPINE_LINUX; 29 | import static io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller.Platform.LINUX; 30 | import static io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller.Platform.MACOS; 31 | import static io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller.Platform.SOLARIS; 32 | import static io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller.Platform.WINDOWS; 33 | import static org.hamcrest.CoreMatchers.anyOf; 34 | import static org.hamcrest.CoreMatchers.is; 35 | import static org.hamcrest.MatcherAssert.assertThat; 36 | import static org.junit.jupiter.api.Assertions.assertFalse; 37 | import static org.junit.jupiter.api.Assertions.assertTrue; 38 | 39 | import org.junit.jupiter.api.AfterEach; 40 | import org.junit.jupiter.api.BeforeEach; 41 | import org.junit.jupiter.api.Test; 42 | 43 | public class AdoptOpenJDKInstallerAlpineTest { 44 | 45 | private String savedOsReleaseLocation = null; 46 | 47 | @BeforeEach 48 | void saveOsReleaseLocation() { 49 | savedOsReleaseLocation = AdoptOpenJDKInstaller.Platform.osReleaseLocation; 50 | } 51 | 52 | @AfterEach 53 | void restoreOsReleaseLocation() { 54 | AdoptOpenJDKInstaller.Platform.osReleaseLocation = savedOsReleaseLocation; 55 | } 56 | 57 | @Test 58 | void fileNotFoundDoesNotThrowException() { 59 | AdoptOpenJDKInstaller.Platform.osReleaseLocation = "non-existent-file"; 60 | assertFalse(AdoptOpenJDKInstaller.Platform.isAlpineLinux()); 61 | } 62 | 63 | @Test 64 | void alpineLinux() throws Exception { 65 | AdoptOpenJDKInstaller.Platform.osReleaseLocation = 66 | getClass().getResource("alpine-os-release").getFile(); 67 | if (isWindows()) { 68 | assertThat(AdoptOpenJDKInstaller.Platform.current(), is(WINDOWS)); 69 | } else { 70 | assertTrue(AdoptOpenJDKInstaller.Platform.isAlpineLinux()); 71 | assertThat(AdoptOpenJDKInstaller.Platform.current(), is(ALPINE_LINUX)); 72 | } 73 | } 74 | 75 | @Test 76 | void ubuntuLinux() throws Exception { 77 | AdoptOpenJDKInstaller.Platform.osReleaseLocation = 78 | getClass().getResource("ubuntu-os-release").getFile(); 79 | if (isWindows()) { 80 | assertThat(AdoptOpenJDKInstaller.Platform.current(), is(WINDOWS)); 81 | } else { 82 | assertFalse(AdoptOpenJDKInstaller.Platform.isAlpineLinux()); 83 | assertThat(AdoptOpenJDKInstaller.Platform.current(), is(LINUX)); 84 | } 85 | } 86 | 87 | @Test 88 | void currentMatchesExpectation() throws Exception { 89 | if (isWindows()) { 90 | assertThat(AdoptOpenJDKInstaller.Platform.current(), is(WINDOWS)); 91 | } else { 92 | assertThat( 93 | AdoptOpenJDKInstaller.Platform.current(), 94 | anyOf(is(ALPINE_LINUX), is(LINUX), is(SOLARIS), is(MACOS), is(AIX))); 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Eclipse Temurin® JDK installer plugin 2 | 3 | Provides an installer for the JDK tool that downloads the Eclipse Temurin® build based upon OpenJDK from the [Adoptium Working Group](https://adoptium.net/). 4 | 5 | ## Usage recommendations 6 | 7 | We want to warn that this plugin is **NOT** a good practice for production environments. As it relies on 8 | Adoptium's website to do the job, it's highly likely to stop working. It could happen because Adoptium's website 9 | changes or even if Adoptium bans our downloads due to excessive bandwidth usage or some other reason. 10 | Currently Adoptium is using GitHub for hosting release archives and GitHub could also stop working due to similar 11 | reasons. 12 | 13 | The recommended and preferred approach is to download the JDK distribution using other installers, for example downloading it from a 14 | well known URL (preferably hosted on your own network) with _ZIP Tool Installer_, having it pre-installed in agent 15 | docker images, or executing a script to do the job. 16 | 17 | ## Configure plugin with [Configuration as Code](https://plugins.jenkins.io/configuration-as-code/) 18 | 19 | The [configuration as code plugin](https://plugins.jenkins.io/configuration-as-code/) allows administrators to automate Jenkins configuration. 20 | The sample configuration below defines tool installers based on agent labels, and uses 21 | 22 | * locally hosted Java installers for Linux and Windows agents (assuming local domain in `example.com`) 23 | * locally installed Java on agents with the `Alpine` label 24 | * locally installed Java on agents with the `cloud` label 25 | * locally installed Java on agents with the `freebsd` label 26 | 27 | If none of those installers are selected, then as a fallback, the agent will download the specified Java version from the Eclipse Temurin® project. 28 | 29 | The example shows the preference to first use locally available zip files and local installations of the JDK. 30 | The JDK will be downloaded from the Eclipse Temurin project only in cases where the local installation is not available or does not apply. 31 | 32 | ```yaml 33 | tool: 34 | jdk: 35 | installations: 36 | - name: "jdk17" 37 | properties: 38 | - installSource: 39 | installers: 40 | - zip: 41 | label: "linux && amd64 && !Alpine && !cloud" 42 | subdir: "jdk-17.0.15+6" 43 | url: "https://example.com/jdk/17/OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz" 44 | - zip: 45 | label: "linux && amd64 && Alpine && !cloud" 46 | subdir: "jdk-17.0.15+6" 47 | url: "https://example.com/jdk/17/OpenJDK17U-jdk_x64_alpine-linux_hotspot_17.0.15_6.tar.gz" 48 | - zip: 49 | label: "windows && amd64" 50 | subdir: "jdk-17.0.15+6" 51 | url: "https://example.com/jdk/17/OpenJDK17U-jdk_x64_windows_hotspot_17.0.15_6.zip" 52 | - command: 53 | command: "true" 54 | label: "cloud" 55 | toolHome: "/home/jenkins/tools/jdk-17.0.15+6" 56 | - command: 57 | command: "true" 58 | label: "freebsd" 59 | toolHome: "/usr/local/openjdk17" 60 | - adoptOpenJdkInstaller: 61 | id: "jdk-17.0.15+6" 62 | - name: "jdk21" 63 | properties: 64 | - installSource: 65 | installers: 66 | - zip: 67 | label: "linux && amd64 && !Alpine && !cloud" 68 | subdir: "jdk-21.0.7+6" 69 | url: "https://example.com/jdk/21/OpenJDK21U-jdk_x64_linux_hotspot_21.0.7_6.tar.gz" 70 | - zip: 71 | label: "linux && amd64 && Alpine && !cloud" 72 | subdir: "jdk-21.0.7+6" 73 | url: "https://example.com/jdk/21/OpenJDK21U-jdk_x64_alpine-linux_hotspot_21.0.7_6.tar.gz" 74 | - zip: 75 | label: "windows && amd64" 76 | subdir: "jdk-21.0.7+6" 77 | url: "https://example.com/jdk/21/OpenJDK21U-jdk_x64_windows_hotspot_21.0.7_6.zip" 78 | - command: 79 | command: "true" 80 | label: "cloud" 81 | toolHome: "/home/jenkins/tools/jdk-21.0.7+6" 82 | - adoptOpenJdkInstaller: 83 | id: "jdk-21.0.7+6" 84 | ``` 85 | 86 | ## Configure plugin via Groovy script 87 | 88 | Either automatically upon [Jenkins post-initialization](https://www.jenkins.io/doc/book/managing/groovy-hook-scripts/) or through 89 | [Jenkins script console](https://www.jenkins.io/doc/book/managing/script-console/), example: 90 | 91 | ```groovy 92 | #!/usr/bin/env groovy 93 | import hudson.model.JDK 94 | import hudson.tools.InstallSourceProperty 95 | import io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller 96 | import jenkins.model.Jenkins 97 | 98 | final versions = [ 99 | 'jdk8' : 'jdk8u452-b09', 100 | 'jdk11': 'jdk-11.0.27+6', 101 | 'jdk17': 'jdk-17.0.15+6', 102 | 'jdk21': 'jdk-21.0.7+6', 103 | ] 104 | 105 | Jenkins.instance.getDescriptor(hudson.model.JDK).with { 106 | installations = versions.collect { 107 | new JDK(it.key, '', [ 108 | new InstallSourceProperty([ 109 | new AdoptOpenJDKInstaller(it.value) 110 | ]) 111 | ]) 112 | } as JDK[] 113 | 114 | } 115 | ``` 116 | 117 | ## Changelog 118 | 119 | Changes in each release are described in [GitHub releases](https://github.com/jenkinsci/adoptopenjdk-plugin/releases). 120 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/adoptopenjdk/AdoptOpenJDKInstallerTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.adoptopenjdk; 2 | 3 | /* 4 | * #%L 5 | * Eclipse Temurin installer Plugin 6 | * %% 7 | * Copyright (C) 2016 - 2019 Mads Mohr Christensen 8 | * %% 9 | * Permission is hereby granted, free of charge, to any person obtaining a copy 10 | * of this software and associated documentation files (the "Software"), to deal 11 | * in the Software without restriction, including without limitation the rights 12 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | * copies of the Software, and to permit persons to whom the Software is 14 | * furnished to do so, subject to the following conditions: 15 | * 16 | * The above copyright notice and this permission notice shall be included in 17 | * all copies or substantial portions of the Software. 18 | * 19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | * THE SOFTWARE. 26 | * #L% 27 | */ 28 | 29 | import static com.github.tomakehurst.wiremock.client.WireMock.*; 30 | import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; 31 | import static hudson.Functions.isWindows; 32 | import static org.junit.jupiter.api.Assertions.assertEquals; 33 | import static org.junit.jupiter.api.Assertions.assertFalse; 34 | import static org.junit.jupiter.api.Assertions.assertTrue; 35 | 36 | import com.github.tomakehurst.wiremock.junit5.WireMockExtension; 37 | import hudson.FilePath; 38 | import hudson.model.*; 39 | import hudson.tasks.BatchFile; 40 | import hudson.tasks.Shell; 41 | import hudson.tools.InstallSourceProperty; 42 | import hudson.tools.ToolInstaller; 43 | import java.nio.charset.StandardCharsets; 44 | import java.util.Collections; 45 | import java.util.Objects; 46 | import org.apache.commons.io.IOUtils; 47 | import org.junit.jupiter.api.BeforeEach; 48 | import org.junit.jupiter.api.Test; 49 | import org.junit.jupiter.api.extension.RegisterExtension; 50 | import org.jvnet.hudson.test.JenkinsRule; 51 | import org.jvnet.hudson.test.junit.jupiter.WithJenkins; 52 | 53 | @WithJenkins 54 | class AdoptOpenJDKInstallerTest { 55 | 56 | private JenkinsRule jenkinsRule; 57 | 58 | @RegisterExtension 59 | static WireMockExtension wireMockExtension = WireMockExtension.newInstance() 60 | .options(wireMockConfig().dynamicPort()) 61 | .build(); 62 | 63 | private AdoptOpenJDKInstaller installer; 64 | private JDK testJdk; 65 | private Slave agent; 66 | 67 | @BeforeEach 68 | void setUp(JenkinsRule r) throws Exception { 69 | jenkinsRule = r; 70 | 71 | // setup agent 72 | agent = jenkinsRule.createOnlineSlave(); 73 | jenkinsRule.jenkins.addNode(agent); 74 | 75 | // configure jdk 76 | installer = new AdoptOpenJDKInstaller("jdk8u345-b01"); 77 | testJdk = new JDK( 78 | "jdk8u345", 79 | null, 80 | Collections.singletonList( 81 | new InstallSourceProperty(Collections.singletonList(installer)))); 82 | jenkinsRule.jenkins.getJDKs().add(testJdk); 83 | 84 | // download releases from mock 85 | DownloadService.Downloadable jdkDl = DownloadService.Downloadable.get(AdoptOpenJDKInstaller.class.getName()); 86 | String releases = IOUtils.toString( 87 | getClass().getResourceAsStream("/" + AdoptOpenJDKInstaller.class.getName()), StandardCharsets.UTF_8); 88 | jdkDl.getDataFile().write(releases.replaceAll("https://github.com", wireMockExtension.baseUrl())); 89 | 90 | setupStub(".*linux.*", "Linux.tar.gz"); 91 | setupStub(".*win.*", "Win.zip"); 92 | setupStub(".*mac.*", "Mac.tar.gz"); 93 | } 94 | 95 | @Test 96 | void configRoundtrip() throws Exception { 97 | jenkinsRule.submit(jenkinsRule.createWebClient().goTo("configureTools").getFormByName("config")); 98 | 99 | JDK jdk = jenkinsRule.jenkins.getJDK(testJdk.getName()); 100 | InstallSourceProperty isp = jdk.getProperties().get(InstallSourceProperty.class); 101 | assertEquals(1, isp.installers.size()); 102 | jenkinsRule.assertEqualBeans(installer, isp.installers.get(AdoptOpenJDKInstaller.class), "id"); 103 | } 104 | 105 | @Test 106 | void installFromCache() throws Exception { 107 | FreeStyleProject freeStyleProject = jenkinsRule.createFreeStyleProject(); 108 | freeStyleProject.setAssignedNode(agent); 109 | freeStyleProject.setJDK(testJdk); 110 | freeStyleProject 111 | .getBuildersList() 112 | .add(isWindows() ? new BatchFile("java -version") : new Shell("java -version")); 113 | 114 | // start initial build to initialize the cache on master 115 | FilePath cacheDir = jenkinsRule.jenkins.getRootPath().child("caches/adoptopenjdk"); 116 | assertFalse(cacheDir.exists()); 117 | FreeStyleBuild freeStyleBuild1 = scheduleBuild(freeStyleProject); 118 | jenkinsRule.assertLogContains(wireMockExtension.baseUrl(), freeStyleBuild1); 119 | jenkinsRule.assertLogNotContains(cacheDir.getRemote(), freeStyleBuild1); 120 | assertTrue(cacheDir.exists()); 121 | 122 | // use installation on agent 123 | FreeStyleBuild freeStyleBuild2 = scheduleBuild(freeStyleProject); 124 | jenkinsRule.assertLogNotContains(wireMockExtension.baseUrl(), freeStyleBuild2); 125 | jenkinsRule.assertLogNotContains(cacheDir.getRemote(), freeStyleBuild2); 126 | 127 | // delete installation on agent 128 | FilePath jdkInstallation = 129 | Objects.requireNonNull(agent.getRootPath()).child("tools/hudson.model.JDK/" + testJdk.getName()); 130 | assertTrue(jdkInstallation.exists()); 131 | jdkInstallation.deleteRecursive(); 132 | assertFalse(jdkInstallation.exists()); 133 | 134 | // build again to install from cache on master 135 | FreeStyleBuild freeStyleBuild3 = scheduleBuild(freeStyleProject); 136 | jenkinsRule.assertLogContains(cacheDir.getRemote(), freeStyleBuild3); 137 | jenkinsRule.assertLogNotContains(wireMockExtension.baseUrl(), freeStyleBuild3); 138 | } 139 | 140 | private void setupStub(String urlRegex, String bodyFile) { 141 | wireMockExtension.stubFor(get(urlMatching(urlRegex)) 142 | .willReturn(aResponse() 143 | .withHeader("Content-Type", "application/octet-stream") 144 | .withBodyFile(bodyFile))); 145 | } 146 | 147 | private FreeStyleBuild scheduleBuild(FreeStyleProject freeStyleProject) throws Exception { 148 | FreeStyleBuild freeStyleBuild = jenkinsRule.assertBuildStatusSuccess(freeStyleProject.scheduleBuild2(0)); 149 | assertEquals(agent, freeStyleBuild.getBuiltOn()); 150 | jenkinsRule.assertLogContains("mock install", freeStyleBuild); 151 | return freeStyleBuild; 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/adoptopenjdk/AdoptOpenJDKInstaller.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.adoptopenjdk; 2 | 3 | /* 4 | * #%L 5 | * Eclipse Temurin installer Plugin 6 | * %% 7 | * Copyright (C) 2016 - 2019 Mads Mohr Christensen 8 | * %% 9 | * Permission is hereby granted, free of charge, to any person obtaining a copy 10 | * of this software and associated documentation files (the "Software"), to deal 11 | * in the Software without restriction, including without limitation the rights 12 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | * copies of the Software, and to permit persons to whom the Software is 14 | * furnished to do so, subject to the following conditions: 15 | * 16 | * The above copyright notice and this permission notice shall be included in 17 | * all copies or substantial portions of the Software. 18 | * 19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | * THE SOFTWARE. 26 | * #L% 27 | */ 28 | 29 | import edu.umd.cs.findbugs.annotations.NonNull; 30 | import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; 31 | import hudson.Extension; 32 | import hudson.FilePath; 33 | import hudson.model.DownloadService; 34 | import hudson.model.JDK; 35 | import hudson.model.Node; 36 | import hudson.model.TaskListener; 37 | import hudson.remoting.VirtualChannel; 38 | import hudson.tools.ToolInstallation; 39 | import hudson.tools.ToolInstaller; 40 | import hudson.tools.ToolInstallerDescriptor; 41 | import hudson.tools.ZipExtractionInstaller; 42 | import java.io.File; 43 | import java.io.IOException; 44 | import java.io.InputStream; 45 | import java.io.OutputStream; 46 | import java.nio.charset.Charset; 47 | import java.nio.file.Files; 48 | import java.nio.file.Path; 49 | import java.nio.file.StandardCopyOption; 50 | import java.util.Arrays; 51 | import java.util.List; 52 | import java.util.Locale; 53 | import java.util.stream.Stream; 54 | import jenkins.model.Jenkins; 55 | import jenkins.security.MasterToSlaveCallable; 56 | import net.sf.json.JSONObject; 57 | import org.apache.commons.io.input.CountingInputStream; 58 | import org.jenkinsci.Symbol; 59 | import org.kohsuke.stapler.DataBoundConstructor; 60 | 61 | /** 62 | * Install OpenJDK from Adoptium 63 | * Based on Oracle Java SE Development Kit Installer 64 | */ 65 | public class AdoptOpenJDKInstaller extends ToolInstaller { 66 | 67 | private static boolean DISABLE_CACHE = Boolean.getBoolean(AdoptOpenJDKInstaller.class.getName() + ".cache.disable"); 68 | 69 | /** 70 | * Eclipse Temurin release id 71 | */ 72 | public final String id; 73 | 74 | @DataBoundConstructor 75 | public AdoptOpenJDKInstaller(String id) { 76 | super(null); 77 | this.id = id; 78 | } 79 | 80 | @NonNull 81 | private static AdoptOpenJDKFamilyList getAdoptOpenJDKFamilyList() throws IOException { 82 | AdoptOpenJDKList list = AdoptOpenJDKList.all().get(AdoptOpenJDKList.class); 83 | if (list == null) { 84 | throw new IOException(Messages.AdoptOpenJDKInstaller_getAdoptOpenJDKFamilyList_NoDownloadable()); 85 | } 86 | return list.toList(); 87 | } 88 | 89 | @Override 90 | public FilePath performInstallation(ToolInstallation tool, Node node, TaskListener log) 91 | throws IOException, InterruptedException { 92 | FilePath expected = preferredLocation(tool, node); 93 | 94 | try { 95 | // already installed? 96 | FilePath marker = expected.child(".installedByJenkins"); 97 | if (marker.exists() && marker.readToString().equals(id)) { 98 | return expected; 99 | } 100 | expected.deleteRecursive(); 101 | expected.mkdirs(); 102 | 103 | AdoptOpenJDKFamilyList jdkFamilyList = getAdoptOpenJDKFamilyList(); 104 | if (jdkFamilyList.isEmpty()) { 105 | throw new IOException(Messages.AdoptOpenJDKInstaller_performInstallation_emptyJdkFamilyList()); 106 | } 107 | AdoptOpenJDKRelease release = jdkFamilyList.getRelease(id); 108 | if (release == null) { 109 | throw new IOException(Messages.AdoptOpenJDKInstaller_performInstallation_releaseNotFound(id)); 110 | } 111 | 112 | Platform p = Platform.of(node); 113 | CPU c = CPU.of(node); 114 | 115 | AdoptOpenJDKFile binary = release.getBinary(p, c); 116 | if (binary == null) { 117 | throw new IOException( 118 | Messages.AdoptOpenJDKInstaller_performInstallation_binaryNotFound(id, p.name(), c.name())); 119 | } 120 | File cache = getLocalCacheFile(p, c); 121 | if (!DISABLE_CACHE && cache.exists()) { 122 | try (InputStream in = cache.toURI().toURL().openStream()) { 123 | CountingInputStream cis = new CountingInputStream(in); 124 | try { 125 | log.getLogger() 126 | .println(Messages.AdoptOpenJDKInstaller_performInstallation_fromCache( 127 | cache, expected, node.getDisplayName())); 128 | // the zip contains already the directory so we unzip to parent directory 129 | FilePath parent = expected.getParent(); 130 | if (parent != null) { 131 | parent.unzipFrom(cis); 132 | } else { 133 | throw new NullPointerException("Parent directory of " + expected + " is null"); 134 | } 135 | } catch (IOException e) { 136 | throw new IOException( 137 | Messages.AdoptOpenJDKInstaller_performInstallation_failedToUnpack( 138 | cache.toURI().toURL(), cis.getByteCount()), 139 | e); 140 | } 141 | } 142 | } else { 143 | String url = binary.binary_link; 144 | ZipExtractionInstaller zipExtractionInstaller = new ZipExtractionInstaller(null, url, null); 145 | FilePath installation = zipExtractionInstaller.performInstallation(tool, node, log); 146 | installation.child(".timestamp").delete(); // we don't use the timestamp 147 | FilePath base = findPullUpDirectory(installation, p); 148 | if (base != null && base != expected) { 149 | base.moveAllChildrenTo(expected); 150 | } 151 | marker.write(id, null); 152 | if (!DISABLE_CACHE) { 153 | // update the local cache on master 154 | // download to a temporary file and rename it in to handle concurrency and failure correctly, 155 | Path tmp = new File(cache.getPath() + ".tmp").toPath(); 156 | try { 157 | Path tmpParent = tmp.getParent(); 158 | if (tmpParent != null) { 159 | Files.createDirectories(tmpParent); 160 | } 161 | try (OutputStream out = Files.newOutputStream(tmp)) { 162 | expected.zip(out); 163 | } 164 | Files.move(tmp, cache.toPath(), StandardCopyOption.REPLACE_EXISTING); 165 | } finally { 166 | Files.deleteIfExists(tmp); 167 | } 168 | } 169 | } 170 | } catch (DetectionFailedException e) { 171 | log.getLogger().println(Messages.AdoptOpenJDKInstaller_performInstallation_JdkSkipped(e.getMessage())); 172 | } 173 | 174 | return expected; 175 | } 176 | 177 | private File getLocalCacheFile(Platform platform, CPU cpu) { 178 | // we force .zip file 179 | return new File(Jenkins.get().getRootDir(), "caches/adoptopenjdk/" + platform + "/" + cpu + "/" + id + ".zip"); 180 | } 181 | 182 | /** 183 | * Often an archive contains an extra top-level directory that's unnecessary when extracted on the disk 184 | * into the expected location. If your installation sources provide that kind of archives, override 185 | * this method to find the real root location. 186 | * 187 | *

188 | * The caller will "pull up" the discovered real root by throw away the intermediate directory, 189 | * so that the user-configured "tool home" directory contains the right files. 190 | * 191 | *

192 | * The default implementation applies some heuristics to auto-determine if the pull up is necessary. 193 | * This should work for typical archive files. 194 | * 195 | * @param root The directory that contains the extracted archive. This directory contains nothing but the 196 | * extracted archive. For example, if the user installed 197 | * jakarta-ant-1.1.zip, this directory would contain 198 | * a single directory "jakarta-ant". 199 | * @param platform The platform for which to find pull up directory for. 200 | * @return Return the real top directory inside {@code root} that contains the meat. In the above example, 201 | * {@code root.child("jakarta-ant")} should be returned. If there's no directory to pull up, return null. 202 | * @throws IOException Signals that an I/O exception of some sort has occurred. 203 | * @throws InterruptedException Thrown when a thread is interrupted. 204 | */ 205 | protected FilePath findPullUpDirectory(FilePath root, Platform platform) throws IOException, InterruptedException { 206 | // if the directory just contains one directory and that alone, assume that's the pull up subject 207 | // otherwise leave it as is. 208 | List children = root.listDirectories(); 209 | if (children.size() != 1) return null; 210 | 211 | // Since the MacOS tar.gz file uses a different layout we need to handle this platform differently 212 | // https://blog.adoptopenjdk.net/2018/10/macos-binary-changes 213 | if (platform == Platform.MACOS) { 214 | FilePath contents = children.get(0).child("Contents/Home"); 215 | if (contents.exists() && contents.isDirectory()) return contents; 216 | } 217 | return children.get(0); 218 | } 219 | 220 | /** 221 | * Supported platform 222 | */ 223 | public enum Platform { 224 | LINUX("linux"), 225 | ALPINE_LINUX("alpine-linux"), 226 | WINDOWS("windows"), 227 | MACOS("mac"), 228 | SOLARIS("solaris"), 229 | AIX("aix"); 230 | 231 | private final String id; 232 | 233 | Platform(String id) { 234 | this.id = id; 235 | } 236 | 237 | public static Platform of(Node n) throws IOException, InterruptedException, DetectionFailedException { 238 | VirtualChannel channel = n.getChannel(); 239 | if (channel == null) { 240 | throw new IOException(Messages.AdoptOpenJDKInstaller_Platform_nullChannel(n.getDisplayName())); 241 | } 242 | return channel.call(new Platform.GetCurrentPlatform()); 243 | } 244 | 245 | public static Platform current() throws DetectionFailedException { 246 | String arch = System.getProperty("os.name").toLowerCase(Locale.ENGLISH); 247 | if (arch.contains("linux")) return isAlpineLinux() ? ALPINE_LINUX : LINUX; 248 | if (arch.contains("windows")) return WINDOWS; 249 | if (arch.contains("sun") || arch.contains("solaris")) return SOLARIS; 250 | if (arch.contains("mac")) return MACOS; 251 | if (arch.contains("aix")) return AIX; 252 | throw new DetectionFailedException(Messages.AdoptOpenJDKInstaller_Platform_unknownPlatform(arch)); 253 | } 254 | 255 | // Package protected so that tests can modify it 256 | static String osReleaseLocation = "/etc/os-release"; 257 | 258 | // Package protected so that it can be tested 259 | static boolean isAlpineLinux() { 260 | File osRelease = new File(osReleaseLocation); 261 | try (Stream lines = Files.lines(osRelease.toPath(), Charset.defaultCharset())) { 262 | return lines.anyMatch("ID=alpine"::equalsIgnoreCase); 263 | } catch (IOException ioe) { 264 | return false; // Do not fail OS detection if osReleaseLocation does not exist 265 | } 266 | } 267 | 268 | public String getId() { 269 | return id; 270 | } 271 | 272 | static class GetCurrentPlatform extends MasterToSlaveCallable { 273 | private static final long serialVersionUID = 1L; 274 | 275 | public Platform call() throws DetectionFailedException { 276 | return current(); 277 | } 278 | } 279 | } 280 | 281 | /** 282 | * Supported CPU architecture 283 | */ 284 | public enum CPU { 285 | i386, 286 | amd64, 287 | Sparc, 288 | s390x, 289 | ppc64, 290 | arm; 291 | 292 | public static CPU of(Node n) throws IOException, InterruptedException, DetectionFailedException { 293 | VirtualChannel channel = n.getChannel(); 294 | if (channel == null) { 295 | throw new IOException(Messages.AdoptOpenJDKInstaller_CPU_nullChannel(n.getDisplayName())); 296 | } 297 | return channel.call(new CPU.GetCurrentCPU()); 298 | } 299 | 300 | public static CPU current() throws DetectionFailedException { 301 | String arch = System.getProperty("os.arch").toLowerCase(Locale.ENGLISH); 302 | if (arch.contains("sparc")) return Sparc; 303 | if (arch.contains("amd64") || arch.contains("86_64")) return amd64; 304 | if (arch.contains("86")) return i386; 305 | if (arch.contains("s390x")) return s390x; 306 | if (arch.contains("ppc64")) return ppc64; 307 | if (arch.contains("arm") || arch.contains("aarch64")) return arm; 308 | throw new DetectionFailedException(Messages.AdoptOpenJDKInstaller_CPU_unknownCpu(arch)); 309 | } 310 | 311 | static class GetCurrentCPU extends MasterToSlaveCallable { 312 | private static final long serialVersionUID = 1L; 313 | 314 | public CPU call() throws DetectionFailedException { 315 | return current(); 316 | } 317 | } 318 | } 319 | 320 | @Extension 321 | @Symbol("adoptOpenJdkInstaller") 322 | public static class DescriptorImpl extends ToolInstallerDescriptor { 323 | 324 | @NonNull 325 | @Override 326 | public String getDisplayName() { 327 | return Messages.AdoptOpenJDKInstaller_DescriptorImpl_DisplayName(); 328 | } 329 | 330 | @Override 331 | public boolean isApplicable(Class toolType) { 332 | return toolType == JDK.class; 333 | } 334 | 335 | public List getInstallableJDKs() throws IOException { 336 | return Arrays.asList(getAdoptOpenJDKFamilyList().data); 337 | } 338 | } 339 | 340 | @Extension 341 | @Symbol("adoptOpenJdk") 342 | public static final class AdoptOpenJDKList extends DownloadService.Downloadable { 343 | public AdoptOpenJDKList() { 344 | super(AdoptOpenJDKInstaller.class); 345 | } 346 | 347 | public AdoptOpenJDKFamilyList toList() throws IOException { 348 | JSONObject d = getData(); 349 | if (d == null) return new AdoptOpenJDKFamilyList(); 350 | return (AdoptOpenJDKFamilyList) JSONObject.toBean(d, AdoptOpenJDKFamilyList.class); 351 | } 352 | } 353 | 354 | private static final class DetectionFailedException extends Exception { 355 | private DetectionFailedException(String message) { 356 | super(message); 357 | } 358 | } 359 | 360 | @SuppressFBWarnings( 361 | value = "NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD", 362 | justification = "Field initialized during deserialization from JSON object") 363 | public static final class AdoptOpenJDKFamilyList { 364 | public AdoptOpenJDKFamily[] data = new AdoptOpenJDKFamily[0]; 365 | public int version; 366 | 367 | public boolean isEmpty() { 368 | for (AdoptOpenJDKFamily f : data) { 369 | if (f.releases.length > 0) { 370 | return false; 371 | } 372 | } 373 | return true; 374 | } 375 | 376 | public AdoptOpenJDKRelease getRelease(String productCode) { 377 | for (AdoptOpenJDKFamily f : data) { 378 | for (AdoptOpenJDKRelease r : f.releases) { 379 | if (r.matchesId(productCode)) { 380 | return r; 381 | } 382 | } 383 | } 384 | return null; 385 | } 386 | } 387 | 388 | @SuppressFBWarnings( 389 | value = {"UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD", "UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"}, 390 | justification = "Field initialized during deserialization from JSON object") 391 | public static final class AdoptOpenJDKFamily { 392 | public String name; 393 | public AdoptOpenJDKRelease[] releases; 394 | } 395 | 396 | @SuppressFBWarnings( 397 | value = {"UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD", "NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"}, 398 | justification = "Field initialized during deserialization from JSON object") 399 | public static final class AdoptOpenJDKRelease { 400 | public AdoptOpenJDKFile[] binaries; 401 | public String release_name; 402 | public String openjdk_impl; 403 | 404 | public boolean matchesId(String rhs) { 405 | return rhs != null && rhs.equals(release_name); 406 | } 407 | 408 | public AdoptOpenJDKFile getBinary(Platform platform, CPU cpu) throws IOException { 409 | for (AdoptOpenJDKFile f : binaries) { 410 | if (!platform.getId().equals(f.os) || !openjdk_impl.equals(f.openjdk_impl)) { 411 | continue; 412 | } 413 | switch (cpu) { 414 | case i386: 415 | if (f.architecture.equals("x32")) return f; 416 | break; 417 | case amd64: 418 | if (f.architecture.equals("x64")) return f; 419 | break; 420 | case Sparc: 421 | if (f.architecture.equals("sparcv9")) return f; 422 | break; 423 | case ppc64: 424 | if (f.architecture.equals("ppc64") || f.architecture.equals("ppc64le")) return f; 425 | break; 426 | case s390x: 427 | if (f.architecture.equals("s390x")) return f; 428 | break; 429 | case arm: 430 | if (f.architecture.equals("arm") || f.architecture.equals("aarch64")) return f; 431 | break; 432 | default: 433 | throw new IOException( 434 | Messages.AdoptOpenJDKInstaller_AdoptOpenJDKRelease_usupportedCpu(cpu.name())); 435 | } 436 | } 437 | return null; 438 | } 439 | } 440 | 441 | @SuppressFBWarnings( 442 | value = "UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD", 443 | justification = "Field initialized during deserialization from JSON object") 444 | public static final class AdoptOpenJDKFile { 445 | public String architecture; 446 | public String os; 447 | public String openjdk_impl; 448 | public String binary_link; 449 | } 450 | } 451 | -------------------------------------------------------------------------------- /src/test/resources/io.jenkins.plugins.adoptopenjdk.AdoptOpenJDKInstaller: -------------------------------------------------------------------------------- 1 | { 2 | "data": [ 3 | { 4 | "name": "OpenJDK 8 - HotSpot", 5 | "releases": [ 6 | { 7 | "binaries": [ 8 | { 9 | "architecture": "x64", 10 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_x64_linux_hotspot_8u345b01.tar.gz", 11 | "openjdk_impl": "hotspot", 12 | "os": "linux" 13 | }, 14 | { 15 | "architecture": "aarch64", 16 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_aarch64_linux_hotspot_8u345b01.tar.gz", 17 | "openjdk_impl": "hotspot", 18 | "os": "linux" 19 | }, 20 | { 21 | "architecture": "x64", 22 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_x64_alpine-linux_hotspot_8u345b01.tar.gz", 23 | "openjdk_impl": "hotspot", 24 | "os": "alpine-linux" 25 | }, 26 | { 27 | "architecture": "ppc64le", 28 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_ppc64le_linux_hotspot_8u345b01.tar.gz", 29 | "openjdk_impl": "hotspot", 30 | "os": "linux" 31 | }, 32 | { 33 | "architecture": "x64", 34 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_x64_mac_hotspot_8u345b01.tar.gz", 35 | "openjdk_impl": "hotspot", 36 | "os": "mac" 37 | }, 38 | { 39 | "architecture": "x64", 40 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_x64_solaris_hotspot_8u345b01.tar.gz", 41 | "openjdk_impl": "hotspot", 42 | "os": "solaris" 43 | }, 44 | { 45 | "architecture": "arm", 46 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_arm_linux_hotspot_8u345b01.tar.gz", 47 | "openjdk_impl": "hotspot", 48 | "os": "linux" 49 | }, 50 | { 51 | "architecture": "x64", 52 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_x64_windows_hotspot_8u345b01.zip", 53 | "openjdk_impl": "hotspot", 54 | "os": "windows" 55 | }, 56 | { 57 | "architecture": "x32", 58 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_x86-32_windows_hotspot_8u345b01.zip", 59 | "openjdk_impl": "hotspot", 60 | "os": "windows" 61 | }, 62 | { 63 | "architecture": "ppc64", 64 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_ppc64_aix_hotspot_8u345b01.tar.gz", 65 | "openjdk_impl": "hotspot", 66 | "os": "aix" 67 | }, 68 | { 69 | "architecture": "sparcv9", 70 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u345-b01/OpenJDK8U-jdk_sparcv9_solaris_hotspot_8u345b01.tar.gz", 71 | "openjdk_impl": "hotspot", 72 | "os": "solaris" 73 | } 74 | ], 75 | "openjdk_impl": "hotspot", 76 | "release_name": "jdk8u345-b01" 77 | }, 78 | { 79 | "binaries": [ 80 | { 81 | "architecture": "x64", 82 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07.1/OpenJDK8U-jdk_x64_windows_hotspot_8u342b07.zip", 83 | "openjdk_impl": "hotspot", 84 | "os": "windows" 85 | } 86 | ], 87 | "openjdk_impl": "hotspot", 88 | "release_name": "jdk8u342-b07.1" 89 | }, 90 | { 91 | "binaries": [ 92 | { 93 | "architecture": "x64", 94 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_x64_linux_hotspot_8u342b07.tar.gz", 95 | "openjdk_impl": "hotspot", 96 | "os": "linux" 97 | }, 98 | { 99 | "architecture": "x64", 100 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_x64_windows_hotspot_8u342b07.zip", 101 | "openjdk_impl": "hotspot", 102 | "os": "windows" 103 | }, 104 | { 105 | "architecture": "ppc64le", 106 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_ppc64le_linux_hotspot_8u342b07.tar.gz", 107 | "openjdk_impl": "hotspot", 108 | "os": "linux" 109 | }, 110 | { 111 | "architecture": "x64", 112 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_x64_alpine-linux_hotspot_8u342b07.tar.gz", 113 | "openjdk_impl": "hotspot", 114 | "os": "alpine-linux" 115 | }, 116 | { 117 | "architecture": "aarch64", 118 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_aarch64_linux_hotspot_8u342b07.tar.gz", 119 | "openjdk_impl": "hotspot", 120 | "os": "linux" 121 | }, 122 | { 123 | "architecture": "x32", 124 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_x86-32_windows_hotspot_8u342b07.zip", 125 | "openjdk_impl": "hotspot", 126 | "os": "windows" 127 | }, 128 | { 129 | "architecture": "ppc64", 130 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_ppc64_aix_hotspot_8u342b07.tar.gz", 131 | "openjdk_impl": "hotspot", 132 | "os": "aix" 133 | }, 134 | { 135 | "architecture": "arm", 136 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u342-b07/OpenJDK8U-jdk_arm_linux_hotspot_8u342b07.tar.gz", 137 | "openjdk_impl": "hotspot", 138 | "os": "linux" 139 | } 140 | ], 141 | "openjdk_impl": "hotspot", 142 | "release_name": "jdk8u342-b07" 143 | }, 144 | { 145 | "binaries": [ 146 | { 147 | "architecture": "x64", 148 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x64_linux_hotspot_8u332b09.tar.gz", 149 | "openjdk_impl": "hotspot", 150 | "os": "linux" 151 | }, 152 | { 153 | "architecture": "aarch64", 154 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u332b09.tar.gz", 155 | "openjdk_impl": "hotspot", 156 | "os": "linux" 157 | }, 158 | { 159 | "architecture": "x64", 160 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x64_mac_hotspot_8u332b09.tar.gz", 161 | "openjdk_impl": "hotspot", 162 | "os": "mac" 163 | }, 164 | { 165 | "architecture": "x64", 166 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x64_solaris_hotspot_8u332b09.tar.gz", 167 | "openjdk_impl": "hotspot", 168 | "os": "solaris" 169 | }, 170 | { 171 | "architecture": "x64", 172 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x64_alpine-linux_hotspot_8u332b09.tar.gz", 173 | "openjdk_impl": "hotspot", 174 | "os": "alpine-linux" 175 | }, 176 | { 177 | "architecture": "ppc64le", 178 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_ppc64le_linux_hotspot_8u332b09.tar.gz", 179 | "openjdk_impl": "hotspot", 180 | "os": "linux" 181 | }, 182 | { 183 | "architecture": "arm", 184 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_arm_linux_hotspot_8u332b09.tar.gz", 185 | "openjdk_impl": "hotspot", 186 | "os": "linux" 187 | }, 188 | { 189 | "architecture": "x64", 190 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x64_windows_hotspot_8u332b09.zip", 191 | "openjdk_impl": "hotspot", 192 | "os": "windows" 193 | }, 194 | { 195 | "architecture": "x32", 196 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_x86-32_windows_hotspot_8u332b09.zip", 197 | "openjdk_impl": "hotspot", 198 | "os": "windows" 199 | }, 200 | { 201 | "architecture": "ppc64", 202 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_ppc64_aix_hotspot_8u332b09.tar.gz", 203 | "openjdk_impl": "hotspot", 204 | "os": "aix" 205 | }, 206 | { 207 | "architecture": "sparcv9", 208 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u332-b09/OpenJDK8U-jdk_sparcv9_solaris_hotspot_8u332b09.tar.gz", 209 | "openjdk_impl": "hotspot", 210 | "os": "solaris" 211 | } 212 | ], 213 | "openjdk_impl": "hotspot", 214 | "release_name": "jdk8u332-b09" 215 | }, 216 | { 217 | "binaries": [ 218 | { 219 | "architecture": "x64", 220 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x64_mac_hotspot_8u322b06.tar.gz", 221 | "openjdk_impl": "hotspot", 222 | "os": "mac" 223 | }, 224 | { 225 | "architecture": "x64", 226 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x64_windows_hotspot_8u322b06.zip", 227 | "openjdk_impl": "hotspot", 228 | "os": "windows" 229 | }, 230 | { 231 | "architecture": "x64", 232 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz", 233 | "openjdk_impl": "hotspot", 234 | "os": "linux" 235 | }, 236 | { 237 | "architecture": "aarch64", 238 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_aarch64_linux_hotspot_8u322b06.tar.gz", 239 | "openjdk_impl": "hotspot", 240 | "os": "linux" 241 | }, 242 | { 243 | "architecture": "ppc64", 244 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_ppc64_aix_hotspot_8u322b06.tar.gz", 245 | "openjdk_impl": "hotspot", 246 | "os": "aix" 247 | }, 248 | { 249 | "architecture": "ppc64le", 250 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_ppc64le_linux_hotspot_8u322b06.tar.gz", 251 | "openjdk_impl": "hotspot", 252 | "os": "linux" 253 | }, 254 | { 255 | "architecture": "sparcv9", 256 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_sparcv9_solaris_hotspot_8u322b06.tar.gz", 257 | "openjdk_impl": "hotspot", 258 | "os": "solaris" 259 | }, 260 | { 261 | "architecture": "x64", 262 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x64_solaris_hotspot_8u322b06.tar.gz", 263 | "openjdk_impl": "hotspot", 264 | "os": "solaris" 265 | }, 266 | { 267 | "architecture": "x32", 268 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x86-32_windows_hotspot_8u322b06.zip", 269 | "openjdk_impl": "hotspot", 270 | "os": "windows" 271 | }, 272 | { 273 | "architecture": "arm", 274 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_arm_linux_hotspot_8u322b06.tar.gz", 275 | "openjdk_impl": "hotspot", 276 | "os": "linux" 277 | }, 278 | { 279 | "architecture": "x64", 280 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u322-b06/OpenJDK8U-jdk_x64_alpine-linux_hotspot_8u322b06.tar.gz", 281 | "openjdk_impl": "hotspot", 282 | "os": "alpine-linux" 283 | } 284 | ], 285 | "openjdk_impl": "hotspot", 286 | "release_name": "jdk8u322-b06" 287 | }, 288 | { 289 | "binaries": [ 290 | { 291 | "architecture": "x64", 292 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_x64_linux_hotspot_8u312b07.tar.gz", 293 | "openjdk_impl": "hotspot", 294 | "os": "linux" 295 | }, 296 | { 297 | "architecture": "x64", 298 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_x64_windows_hotspot_8u312b07.zip", 299 | "openjdk_impl": "hotspot", 300 | "os": "windows" 301 | }, 302 | { 303 | "architecture": "aarch64", 304 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_aarch64_linux_hotspot_8u312b07.tar.gz", 305 | "openjdk_impl": "hotspot", 306 | "os": "linux" 307 | }, 308 | { 309 | "architecture": "x64", 310 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_x64_mac_hotspot_8u312b07.tar.gz", 311 | "openjdk_impl": "hotspot", 312 | "os": "mac" 313 | }, 314 | { 315 | "architecture": "ppc64", 316 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_ppc64_aix_hotspot_8u312b07.tar.gz", 317 | "openjdk_impl": "hotspot", 318 | "os": "aix" 319 | }, 320 | { 321 | "architecture": "x32", 322 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_x86-32_windows_hotspot_8u312b07.zip", 323 | "openjdk_impl": "hotspot", 324 | "os": "windows" 325 | }, 326 | { 327 | "architecture": "ppc64le", 328 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_ppc64le_linux_hotspot_8u312b07.tar.gz", 329 | "openjdk_impl": "hotspot", 330 | "os": "linux" 331 | }, 332 | { 333 | "architecture": "arm", 334 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_arm_linux_hotspot_8u312b07.tar.gz", 335 | "openjdk_impl": "hotspot", 336 | "os": "linux" 337 | }, 338 | { 339 | "architecture": "sparcv9", 340 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_sparcv9_solaris_hotspot_8u312b07.tar.gz", 341 | "openjdk_impl": "hotspot", 342 | "os": "solaris" 343 | }, 344 | { 345 | "architecture": "x64", 346 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u312-b07/OpenJDK8U-jdk_x64_solaris_hotspot_8u312b07.tar.gz", 347 | "openjdk_impl": "hotspot", 348 | "os": "solaris" 349 | } 350 | ], 351 | "openjdk_impl": "hotspot", 352 | "release_name": "jdk8u312-b07" 353 | }, 354 | { 355 | "binaries": [ 356 | { 357 | "architecture": "x64", 358 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08.1/OpenJDK8U-jdk_x64_windows_hotspot_8u302b08.zip", 359 | "openjdk_impl": "hotspot", 360 | "os": "windows" 361 | } 362 | ], 363 | "openjdk_impl": "hotspot", 364 | "release_name": "jdk8u302-b08.1" 365 | }, 366 | { 367 | "binaries": [ 368 | { 369 | "architecture": "x64", 370 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u302b08.tar.gz", 371 | "openjdk_impl": "hotspot", 372 | "os": "linux" 373 | }, 374 | { 375 | "architecture": "x64", 376 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_x64_mac_hotspot_8u302b08.tar.gz", 377 | "openjdk_impl": "hotspot", 378 | "os": "mac" 379 | }, 380 | { 381 | "architecture": "x64", 382 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_x64_windows_hotspot_8u302b08.zip", 383 | "openjdk_impl": "hotspot", 384 | "os": "windows" 385 | }, 386 | { 387 | "architecture": "aarch64", 388 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_aarch64_linux_hotspot_8u302b08.tar.gz", 389 | "openjdk_impl": "hotspot", 390 | "os": "linux" 391 | }, 392 | { 393 | "architecture": "ppc64le", 394 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_ppc64le_linux_hotspot_8u302b08.tar.gz", 395 | "openjdk_impl": "hotspot", 396 | "os": "linux" 397 | }, 398 | { 399 | "architecture": "ppc64", 400 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_ppc64_aix_hotspot_8u302b08.tar.gz", 401 | "openjdk_impl": "hotspot", 402 | "os": "aix" 403 | }, 404 | { 405 | "architecture": "x32", 406 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_x86-32_windows_hotspot_8u302b08.zip", 407 | "openjdk_impl": "hotspot", 408 | "os": "windows" 409 | }, 410 | { 411 | "architecture": "arm", 412 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_arm_linux_hotspot_8u302b08.tar.gz", 413 | "openjdk_impl": "hotspot", 414 | "os": "linux" 415 | }, 416 | { 417 | "architecture": "sparcv9", 418 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_sparcv9_solaris_hotspot_8u302b08.tar.gz", 419 | "openjdk_impl": "hotspot", 420 | "os": "solaris" 421 | }, 422 | { 423 | "architecture": "x64", 424 | "binary_link": "https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/OpenJDK8U-jdk_x64_solaris_hotspot_8u302b08.tar.gz", 425 | "openjdk_impl": "hotspot", 426 | "os": "solaris" 427 | } 428 | ], 429 | "openjdk_impl": "hotspot", 430 | "release_name": "jdk8u302-b08" 431 | } 432 | ] 433 | }, 434 | { 435 | "name": "OpenJDK 11 - HotSpot", 436 | "releases": [ 437 | { 438 | "binaries": [ 439 | { 440 | "architecture": "x64", 441 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_x64_windows_hotspot_11.0.16.1_1.zip", 442 | "openjdk_impl": "hotspot", 443 | "os": "windows" 444 | }, 445 | { 446 | "architecture": "x32", 447 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.16.1_1.zip", 448 | "openjdk_impl": "hotspot", 449 | "os": "windows" 450 | }, 451 | { 452 | "architecture": "arm", 453 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_arm_linux_hotspot_11.0.16.1_1.tar.gz", 454 | "openjdk_impl": "hotspot", 455 | "os": "linux" 456 | }, 457 | { 458 | "architecture": "x64", 459 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_x64_alpine-linux_hotspot_11.0.16.1_1.tar.gz", 460 | "openjdk_impl": "hotspot", 461 | "os": "alpine-linux" 462 | }, 463 | { 464 | "architecture": "aarch64", 465 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.16.1_1.tar.gz", 466 | "openjdk_impl": "hotspot", 467 | "os": "linux" 468 | }, 469 | { 470 | "architecture": "x64", 471 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_x64_linux_hotspot_11.0.16.1_1.tar.gz", 472 | "openjdk_impl": "hotspot", 473 | "os": "linux" 474 | }, 475 | { 476 | "architecture": "aarch64", 477 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_aarch64_mac_hotspot_11.0.16.1_1.tar.gz", 478 | "openjdk_impl": "hotspot", 479 | "os": "mac" 480 | }, 481 | { 482 | "architecture": "s390x", 483 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.16.1_1.tar.gz", 484 | "openjdk_impl": "hotspot", 485 | "os": "linux" 486 | }, 487 | { 488 | "architecture": "ppc64le", 489 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.16.1_1.tar.gz", 490 | "openjdk_impl": "hotspot", 491 | "os": "linux" 492 | }, 493 | { 494 | "architecture": "x64", 495 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_x64_mac_hotspot_11.0.16.1_1.tar.gz", 496 | "openjdk_impl": "hotspot", 497 | "os": "mac" 498 | }, 499 | { 500 | "architecture": "ppc64", 501 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_ppc64_aix_hotspot_11.0.16.1_1.tar.gz", 502 | "openjdk_impl": "hotspot", 503 | "os": "aix" 504 | } 505 | ], 506 | "openjdk_impl": "hotspot", 507 | "release_name": "jdk-11.0.16.1+1" 508 | }, 509 | { 510 | "binaries": [ 511 | { 512 | "architecture": "aarch64", 513 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.16_8.tar.gz", 514 | "openjdk_impl": "hotspot", 515 | "os": "linux" 516 | }, 517 | { 518 | "architecture": "x64", 519 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_x64_linux_hotspot_11.0.16_8.tar.gz", 520 | "openjdk_impl": "hotspot", 521 | "os": "linux" 522 | }, 523 | { 524 | "architecture": "x64", 525 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_x64_windows_hotspot_11.0.16_8.zip", 526 | "openjdk_impl": "hotspot", 527 | "os": "windows" 528 | }, 529 | { 530 | "architecture": "x64", 531 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_x64_alpine-linux_hotspot_11.0.16_8.tar.gz", 532 | "openjdk_impl": "hotspot", 533 | "os": "alpine-linux" 534 | }, 535 | { 536 | "architecture": "ppc64le", 537 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.16_8.tar.gz", 538 | "openjdk_impl": "hotspot", 539 | "os": "linux" 540 | }, 541 | { 542 | "architecture": "x64", 543 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_x64_mac_hotspot_11.0.16_8.tar.gz", 544 | "openjdk_impl": "hotspot", 545 | "os": "mac" 546 | }, 547 | { 548 | "architecture": "arm", 549 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_arm_linux_hotspot_11.0.16_8.tar.gz", 550 | "openjdk_impl": "hotspot", 551 | "os": "linux" 552 | }, 553 | { 554 | "architecture": "x32", 555 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.16_8.zip", 556 | "openjdk_impl": "hotspot", 557 | "os": "windows" 558 | }, 559 | { 560 | "architecture": "s390x", 561 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.16_8.tar.gz", 562 | "openjdk_impl": "hotspot", 563 | "os": "linux" 564 | }, 565 | { 566 | "architecture": "ppc64", 567 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_ppc64_aix_hotspot_11.0.16_8.tar.gz", 568 | "openjdk_impl": "hotspot", 569 | "os": "aix" 570 | }, 571 | { 572 | "architecture": "aarch64", 573 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.16%2B8/OpenJDK11U-jdk_aarch64_mac_hotspot_11.0.16_8.tar.gz", 574 | "openjdk_impl": "hotspot", 575 | "os": "mac" 576 | } 577 | ], 578 | "openjdk_impl": "hotspot", 579 | "release_name": "jdk-11.0.16+8" 580 | }, 581 | { 582 | "binaries": [ 583 | { 584 | "architecture": "x64", 585 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_x64_linux_hotspot_11.0.15_10.tar.gz", 586 | "openjdk_impl": "hotspot", 587 | "os": "linux" 588 | }, 589 | { 590 | "architecture": "x64", 591 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_x64_windows_hotspot_11.0.15_10.zip", 592 | "openjdk_impl": "hotspot", 593 | "os": "windows" 594 | }, 595 | { 596 | "architecture": "x64", 597 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_x64_mac_hotspot_11.0.15_10.tar.gz", 598 | "openjdk_impl": "hotspot", 599 | "os": "mac" 600 | }, 601 | { 602 | "architecture": "aarch64", 603 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.15_10.tar.gz", 604 | "openjdk_impl": "hotspot", 605 | "os": "linux" 606 | }, 607 | { 608 | "architecture": "s390x", 609 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.15_10.tar.gz", 610 | "openjdk_impl": "hotspot", 611 | "os": "linux" 612 | }, 613 | { 614 | "architecture": "x64", 615 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_x64_alpine-linux_hotspot_11.0.15_10.tar.gz", 616 | "openjdk_impl": "hotspot", 617 | "os": "alpine-linux" 618 | }, 619 | { 620 | "architecture": "ppc64le", 621 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.15_10.tar.gz", 622 | "openjdk_impl": "hotspot", 623 | "os": "linux" 624 | }, 625 | { 626 | "architecture": "arm", 627 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_arm_linux_hotspot_11.0.15_10.tar.gz", 628 | "openjdk_impl": "hotspot", 629 | "os": "linux" 630 | }, 631 | { 632 | "architecture": "x32", 633 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.15_10.zip", 634 | "openjdk_impl": "hotspot", 635 | "os": "windows" 636 | }, 637 | { 638 | "architecture": "ppc64", 639 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_ppc64_aix_hotspot_11.0.15_10.tar.gz", 640 | "openjdk_impl": "hotspot", 641 | "os": "aix" 642 | }, 643 | { 644 | "architecture": "aarch64", 645 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15%2B10/OpenJDK11U-jdk_aarch64_mac_hotspot_11.0.15_10.tar.gz", 646 | "openjdk_impl": "hotspot", 647 | "os": "mac" 648 | } 649 | ], 650 | "openjdk_impl": "hotspot", 651 | "release_name": "jdk-11.0.15+10" 652 | }, 653 | { 654 | "binaries": [ 655 | { 656 | "architecture": "x64", 657 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_x64_mac_hotspot_11.0.14.1_1.tar.gz", 658 | "openjdk_impl": "hotspot", 659 | "os": "mac" 660 | }, 661 | { 662 | "architecture": "x64", 663 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_x64_windows_hotspot_11.0.14.1_1.zip", 664 | "openjdk_impl": "hotspot", 665 | "os": "windows" 666 | }, 667 | { 668 | "architecture": "x32", 669 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.14.1_1.zip", 670 | "openjdk_impl": "hotspot", 671 | "os": "windows" 672 | }, 673 | { 674 | "architecture": "aarch64", 675 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.14.1_1.tar.gz", 676 | "openjdk_impl": "hotspot", 677 | "os": "linux" 678 | }, 679 | { 680 | "architecture": "arm", 681 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_arm_linux_hotspot_11.0.14.1_1.tar.gz", 682 | "openjdk_impl": "hotspot", 683 | "os": "linux" 684 | }, 685 | { 686 | "architecture": "ppc64", 687 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_ppc64_aix_hotspot_11.0.14.1_1.tar.gz", 688 | "openjdk_impl": "hotspot", 689 | "os": "aix" 690 | }, 691 | { 692 | "architecture": "ppc64le", 693 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.14.1_1.tar.gz", 694 | "openjdk_impl": "hotspot", 695 | "os": "linux" 696 | }, 697 | { 698 | "architecture": "s390x", 699 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.14.1_1.tar.gz", 700 | "openjdk_impl": "hotspot", 701 | "os": "linux" 702 | }, 703 | { 704 | "architecture": "x64", 705 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_x64_linux_hotspot_11.0.14.1_1.tar.gz", 706 | "openjdk_impl": "hotspot", 707 | "os": "linux" 708 | }, 709 | { 710 | "architecture": "x64", 711 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14.1%2B1/OpenJDK11U-jdk_x64_alpine-linux_hotspot_11.0.14.1_1.tar.gz", 712 | "openjdk_impl": "hotspot", 713 | "os": "alpine-linux" 714 | } 715 | ], 716 | "openjdk_impl": "hotspot", 717 | "release_name": "jdk-11.0.14.1+1" 718 | }, 719 | { 720 | "binaries": [ 721 | { 722 | "architecture": "aarch64", 723 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.14_9.tar.gz", 724 | "openjdk_impl": "hotspot", 725 | "os": "linux" 726 | }, 727 | { 728 | "architecture": "ppc64", 729 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_ppc64_aix_hotspot_11.0.14_9.tar.gz", 730 | "openjdk_impl": "hotspot", 731 | "os": "aix" 732 | }, 733 | { 734 | "architecture": "x64", 735 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.14_9.tar.gz", 736 | "openjdk_impl": "hotspot", 737 | "os": "linux" 738 | }, 739 | { 740 | "architecture": "x64", 741 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_x64_mac_hotspot_11.0.14_9.tar.gz", 742 | "openjdk_impl": "hotspot", 743 | "os": "mac" 744 | }, 745 | { 746 | "architecture": "x64", 747 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_x64_windows_hotspot_11.0.14_9.zip", 748 | "openjdk_impl": "hotspot", 749 | "os": "windows" 750 | }, 751 | { 752 | "architecture": "ppc64le", 753 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.14_9.tar.gz", 754 | "openjdk_impl": "hotspot", 755 | "os": "linux" 756 | }, 757 | { 758 | "architecture": "x64", 759 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_x64_alpine-linux_hotspot_11.0.14_9.tar.gz", 760 | "openjdk_impl": "hotspot", 761 | "os": "alpine-linux" 762 | }, 763 | { 764 | "architecture": "s390x", 765 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.14_9.tar.gz", 766 | "openjdk_impl": "hotspot", 767 | "os": "linux" 768 | }, 769 | { 770 | "architecture": "arm", 771 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_arm_linux_hotspot_11.0.14_9.tar.gz", 772 | "openjdk_impl": "hotspot", 773 | "os": "linux" 774 | }, 775 | { 776 | "architecture": "x32", 777 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.14%2B9/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.14_9.zip", 778 | "openjdk_impl": "hotspot", 779 | "os": "windows" 780 | } 781 | ], 782 | "openjdk_impl": "hotspot", 783 | "release_name": "jdk-11.0.14+9" 784 | }, 785 | { 786 | "binaries": [ 787 | { 788 | "architecture": "x64", 789 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_x64_linux_hotspot_11.0.13_8.tar.gz", 790 | "openjdk_impl": "hotspot", 791 | "os": "linux" 792 | }, 793 | { 794 | "architecture": "aarch64", 795 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.13_8.tar.gz", 796 | "openjdk_impl": "hotspot", 797 | "os": "linux" 798 | }, 799 | { 800 | "architecture": "s390x", 801 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.13_8.tar.gz", 802 | "openjdk_impl": "hotspot", 803 | "os": "linux" 804 | }, 805 | { 806 | "architecture": "x64", 807 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_x64_windows_hotspot_11.0.13_8.zip", 808 | "openjdk_impl": "hotspot", 809 | "os": "windows" 810 | }, 811 | { 812 | "architecture": "x64", 813 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_x64_alpine-linux_hotspot_11.0.13_8.tar.gz", 814 | "openjdk_impl": "hotspot", 815 | "os": "alpine-linux" 816 | }, 817 | { 818 | "architecture": "x64", 819 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_x64_mac_hotspot_11.0.13_8.tar.gz", 820 | "openjdk_impl": "hotspot", 821 | "os": "mac" 822 | }, 823 | { 824 | "architecture": "arm", 825 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_arm_linux_hotspot_11.0.13_8.tar.gz", 826 | "openjdk_impl": "hotspot", 827 | "os": "linux" 828 | }, 829 | { 830 | "architecture": "ppc64le", 831 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.13_8.tar.gz", 832 | "openjdk_impl": "hotspot", 833 | "os": "linux" 834 | }, 835 | { 836 | "architecture": "x32", 837 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.13_8.zip", 838 | "openjdk_impl": "hotspot", 839 | "os": "windows" 840 | }, 841 | { 842 | "architecture": "ppc64", 843 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.13%2B8/OpenJDK11U-jdk_ppc64_aix_hotspot_11.0.13_8.tar.gz", 844 | "openjdk_impl": "hotspot", 845 | "os": "aix" 846 | } 847 | ], 848 | "openjdk_impl": "hotspot", 849 | "release_name": "jdk-11.0.13+8" 850 | }, 851 | { 852 | "binaries": [ 853 | { 854 | "architecture": "x64", 855 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz", 856 | "openjdk_impl": "hotspot", 857 | "os": "linux" 858 | }, 859 | { 860 | "architecture": "x64", 861 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_mac_hotspot_11.0.12_7.tar.gz", 862 | "openjdk_impl": "hotspot", 863 | "os": "mac" 864 | }, 865 | { 866 | "architecture": "x64", 867 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_windows_hotspot_11.0.12_7.zip", 868 | "openjdk_impl": "hotspot", 869 | "os": "windows" 870 | }, 871 | { 872 | "architecture": "aarch64", 873 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.12_7.tar.gz", 874 | "openjdk_impl": "hotspot", 875 | "os": "linux" 876 | }, 877 | { 878 | "architecture": "ppc64le", 879 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.12_7.tar.gz", 880 | "openjdk_impl": "hotspot", 881 | "os": "linux" 882 | }, 883 | { 884 | "architecture": "ppc64", 885 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_ppc64_aix_hotspot_11.0.12_7.tar.gz", 886 | "openjdk_impl": "hotspot", 887 | "os": "aix" 888 | }, 889 | { 890 | "architecture": "s390x", 891 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_s390x_linux_hotspot_11.0.12_7.tar.gz", 892 | "openjdk_impl": "hotspot", 893 | "os": "linux" 894 | }, 895 | { 896 | "architecture": "x32", 897 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x86-32_windows_hotspot_11.0.12_7.zip", 898 | "openjdk_impl": "hotspot", 899 | "os": "windows" 900 | }, 901 | { 902 | "architecture": "arm", 903 | "binary_link": "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_arm_linux_hotspot_11.0.12_7.tar.gz", 904 | "openjdk_impl": "hotspot", 905 | "os": "linux" 906 | } 907 | ], 908 | "openjdk_impl": "hotspot", 909 | "release_name": "jdk-11.0.12+7" 910 | } 911 | ] 912 | }, 913 | { 914 | "name": "OpenJDK 16 - HotSpot", 915 | "releases": [ 916 | { 917 | "binaries": [ 918 | { 919 | "architecture": "x64", 920 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_x64_linux_hotspot_16.0.2_7.tar.gz", 921 | "openjdk_impl": "hotspot", 922 | "os": "linux" 923 | }, 924 | { 925 | "architecture": "x64", 926 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_x64_mac_hotspot_16.0.2_7.tar.gz", 927 | "openjdk_impl": "hotspot", 928 | "os": "mac" 929 | }, 930 | { 931 | "architecture": "x64", 932 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_x64_windows_hotspot_16.0.2_7.zip", 933 | "openjdk_impl": "hotspot", 934 | "os": "windows" 935 | }, 936 | { 937 | "architecture": "aarch64", 938 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_aarch64_linux_hotspot_16.0.2_7.tar.gz", 939 | "openjdk_impl": "hotspot", 940 | "os": "linux" 941 | }, 942 | { 943 | "architecture": "ppc64le", 944 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_ppc64le_linux_hotspot_16.0.2_7.tar.gz", 945 | "openjdk_impl": "hotspot", 946 | "os": "linux" 947 | }, 948 | { 949 | "architecture": "s390x", 950 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_s390x_linux_hotspot_16.0.2_7.tar.gz", 951 | "openjdk_impl": "hotspot", 952 | "os": "linux" 953 | }, 954 | { 955 | "architecture": "x32", 956 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_x86-32_windows_hotspot_16.0.2_7.zip", 957 | "openjdk_impl": "hotspot", 958 | "os": "windows" 959 | }, 960 | { 961 | "architecture": "x64", 962 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_x64_alpine-linux_hotspot_16.0.2_7.tar.gz", 963 | "openjdk_impl": "hotspot", 964 | "os": "alpine-linux" 965 | }, 966 | { 967 | "architecture": "arm", 968 | "binary_link": "https://github.com/adoptium/temurin16-binaries/releases/download/jdk-16.0.2%2B7/OpenJDK16U-jdk_arm_linux_hotspot_16.0.2_7.tar.gz", 969 | "openjdk_impl": "hotspot", 970 | "os": "linux" 971 | } 972 | ], 973 | "openjdk_impl": "hotspot", 974 | "release_name": "jdk-16.0.2+7" 975 | } 976 | ] 977 | }, 978 | { 979 | "name": "OpenJDK 17 - HotSpot", 980 | "releases": [ 981 | { 982 | "binaries": [ 983 | { 984 | "architecture": "s390x", 985 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.4.1_1.tar.gz", 986 | "openjdk_impl": "hotspot", 987 | "os": "linux" 988 | }, 989 | { 990 | "architecture": "aarch64", 991 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_aarch64_linux_hotspot_17.0.4.1_1.tar.gz", 992 | "openjdk_impl": "hotspot", 993 | "os": "linux" 994 | }, 995 | { 996 | "architecture": "x64", 997 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_x64_linux_hotspot_17.0.4.1_1.tar.gz", 998 | "openjdk_impl": "hotspot", 999 | "os": "linux" 1000 | }, 1001 | { 1002 | "architecture": "ppc64le", 1003 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.4.1_1.tar.gz", 1004 | "openjdk_impl": "hotspot", 1005 | "os": "linux" 1006 | }, 1007 | { 1008 | "architecture": "arm", 1009 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_arm_linux_hotspot_17.0.4.1_1.tar.gz", 1010 | "openjdk_impl": "hotspot", 1011 | "os": "linux" 1012 | }, 1013 | { 1014 | "architecture": "x64", 1015 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_x64_alpine-linux_hotspot_17.0.4.1_1.tar.gz", 1016 | "openjdk_impl": "hotspot", 1017 | "os": "alpine-linux" 1018 | }, 1019 | { 1020 | "architecture": "aarch64", 1021 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.4.1_1.tar.gz", 1022 | "openjdk_impl": "hotspot", 1023 | "os": "mac" 1024 | }, 1025 | { 1026 | "architecture": "x64", 1027 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_x64_windows_hotspot_17.0.4.1_1.zip", 1028 | "openjdk_impl": "hotspot", 1029 | "os": "windows" 1030 | }, 1031 | { 1032 | "architecture": "x32", 1033 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_x86-32_windows_hotspot_17.0.4.1_1.zip", 1034 | "openjdk_impl": "hotspot", 1035 | "os": "windows" 1036 | }, 1037 | { 1038 | "architecture": "x64", 1039 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4.1%2B1/OpenJDK17U-jdk_x64_mac_hotspot_17.0.4.1_1.tar.gz", 1040 | "openjdk_impl": "hotspot", 1041 | "os": "mac" 1042 | } 1043 | ], 1044 | "openjdk_impl": "hotspot", 1045 | "release_name": "jdk-17.0.4.1+1" 1046 | }, 1047 | { 1048 | "binaries": [ 1049 | { 1050 | "architecture": "x64", 1051 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.4_8.tar.gz", 1052 | "openjdk_impl": "hotspot", 1053 | "os": "linux" 1054 | }, 1055 | { 1056 | "architecture": "x64", 1057 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_x64_windows_hotspot_17.0.4_8.zip", 1058 | "openjdk_impl": "hotspot", 1059 | "os": "windows" 1060 | }, 1061 | { 1062 | "architecture": "aarch64", 1063 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_aarch64_linux_hotspot_17.0.4_8.tar.gz", 1064 | "openjdk_impl": "hotspot", 1065 | "os": "linux" 1066 | }, 1067 | { 1068 | "architecture": "ppc64le", 1069 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.4_8.tar.gz", 1070 | "openjdk_impl": "hotspot", 1071 | "os": "linux" 1072 | }, 1073 | { 1074 | "architecture": "x64", 1075 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_x64_alpine-linux_hotspot_17.0.4_8.tar.gz", 1076 | "openjdk_impl": "hotspot", 1077 | "os": "alpine-linux" 1078 | }, 1079 | { 1080 | "architecture": "x32", 1081 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_x86-32_windows_hotspot_17.0.4_8.zip", 1082 | "openjdk_impl": "hotspot", 1083 | "os": "windows" 1084 | }, 1085 | { 1086 | "architecture": "arm", 1087 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_arm_linux_hotspot_17.0.4_8.tar.gz", 1088 | "openjdk_impl": "hotspot", 1089 | "os": "linux" 1090 | }, 1091 | { 1092 | "architecture": "s390x", 1093 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.4_8.tar.gz", 1094 | "openjdk_impl": "hotspot", 1095 | "os": "linux" 1096 | }, 1097 | { 1098 | "architecture": "x64", 1099 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_x64_mac_hotspot_17.0.4_8.tar.gz", 1100 | "openjdk_impl": "hotspot", 1101 | "os": "mac" 1102 | }, 1103 | { 1104 | "architecture": "aarch64", 1105 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.4%2B8/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.4_8.tar.gz", 1106 | "openjdk_impl": "hotspot", 1107 | "os": "mac" 1108 | } 1109 | ], 1110 | "openjdk_impl": "hotspot", 1111 | "release_name": "jdk-17.0.4+8" 1112 | }, 1113 | { 1114 | "binaries": [ 1115 | { 1116 | "architecture": "x64", 1117 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.3_7.tar.gz", 1118 | "openjdk_impl": "hotspot", 1119 | "os": "linux" 1120 | }, 1121 | { 1122 | "architecture": "x64", 1123 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_x64_mac_hotspot_17.0.3_7.tar.gz", 1124 | "openjdk_impl": "hotspot", 1125 | "os": "mac" 1126 | }, 1127 | { 1128 | "architecture": "x64", 1129 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_x64_windows_hotspot_17.0.3_7.zip", 1130 | "openjdk_impl": "hotspot", 1131 | "os": "windows" 1132 | }, 1133 | { 1134 | "architecture": "aarch64", 1135 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_aarch64_linux_hotspot_17.0.3_7.tar.gz", 1136 | "openjdk_impl": "hotspot", 1137 | "os": "linux" 1138 | }, 1139 | { 1140 | "architecture": "ppc64le", 1141 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.3_7.tar.gz", 1142 | "openjdk_impl": "hotspot", 1143 | "os": "linux" 1144 | }, 1145 | { 1146 | "architecture": "arm", 1147 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_arm_linux_hotspot_17.0.3_7.tar.gz", 1148 | "openjdk_impl": "hotspot", 1149 | "os": "linux" 1150 | }, 1151 | { 1152 | "architecture": "s390x", 1153 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.3_7.tar.gz", 1154 | "openjdk_impl": "hotspot", 1155 | "os": "linux" 1156 | }, 1157 | { 1158 | "architecture": "x64", 1159 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_x64_alpine-linux_hotspot_17.0.3_7.tar.gz", 1160 | "openjdk_impl": "hotspot", 1161 | "os": "alpine-linux" 1162 | }, 1163 | { 1164 | "architecture": "x32", 1165 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_x86-32_windows_hotspot_17.0.3_7.zip", 1166 | "openjdk_impl": "hotspot", 1167 | "os": "windows" 1168 | }, 1169 | { 1170 | "architecture": "aarch64", 1171 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.3%2B7/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.3_7.tar.gz", 1172 | "openjdk_impl": "hotspot", 1173 | "os": "mac" 1174 | } 1175 | ], 1176 | "openjdk_impl": "hotspot", 1177 | "release_name": "jdk-17.0.3+7" 1178 | }, 1179 | { 1180 | "binaries": [ 1181 | { 1182 | "architecture": "aarch64", 1183 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.2_8.tar.gz", 1184 | "openjdk_impl": "hotspot", 1185 | "os": "mac" 1186 | }, 1187 | { 1188 | "architecture": "x64", 1189 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_mac_hotspot_17.0.2_8.tar.gz", 1190 | "openjdk_impl": "hotspot", 1191 | "os": "mac" 1192 | }, 1193 | { 1194 | "architecture": "x64", 1195 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_windows_hotspot_17.0.2_8.zip", 1196 | "openjdk_impl": "hotspot", 1197 | "os": "windows" 1198 | }, 1199 | { 1200 | "architecture": "aarch64", 1201 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_aarch64_linux_hotspot_17.0.2_8.tar.gz", 1202 | "openjdk_impl": "hotspot", 1203 | "os": "linux" 1204 | }, 1205 | { 1206 | "architecture": "x64", 1207 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_alpine-linux_hotspot_17.0.2_8.tar.gz", 1208 | "openjdk_impl": "hotspot", 1209 | "os": "alpine-linux" 1210 | }, 1211 | { 1212 | "architecture": "x64", 1213 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x64_linux_hotspot_17.0.2_8.tar.gz", 1214 | "openjdk_impl": "hotspot", 1215 | "os": "linux" 1216 | }, 1217 | { 1218 | "architecture": "ppc64le", 1219 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.2_8.tar.gz", 1220 | "openjdk_impl": "hotspot", 1221 | "os": "linux" 1222 | }, 1223 | { 1224 | "architecture": "arm", 1225 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_arm_linux_hotspot_17.0.2_8.tar.gz", 1226 | "openjdk_impl": "hotspot", 1227 | "os": "linux" 1228 | }, 1229 | { 1230 | "architecture": "s390x", 1231 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.2_8.tar.gz", 1232 | "openjdk_impl": "hotspot", 1233 | "os": "linux" 1234 | }, 1235 | { 1236 | "architecture": "x32", 1237 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.2%2B8/OpenJDK17U-jdk_x86-32_windows_hotspot_17.0.2_8.zip", 1238 | "openjdk_impl": "hotspot", 1239 | "os": "windows" 1240 | } 1241 | ], 1242 | "openjdk_impl": "hotspot", 1243 | "release_name": "jdk-17.0.2+8" 1244 | }, 1245 | { 1246 | "binaries": [ 1247 | { 1248 | "architecture": "aarch64", 1249 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_aarch64_linux_hotspot_17.0.1_12.tar.gz", 1250 | "openjdk_impl": "hotspot", 1251 | "os": "linux" 1252 | }, 1253 | { 1254 | "architecture": "x64", 1255 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x64_linux_hotspot_17.0.1_12.tar.gz", 1256 | "openjdk_impl": "hotspot", 1257 | "os": "linux" 1258 | }, 1259 | { 1260 | "architecture": "x64", 1261 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x64_mac_hotspot_17.0.1_12.tar.gz", 1262 | "openjdk_impl": "hotspot", 1263 | "os": "mac" 1264 | }, 1265 | { 1266 | "architecture": "x64", 1267 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x64_windows_hotspot_17.0.1_12.zip", 1268 | "openjdk_impl": "hotspot", 1269 | "os": "windows" 1270 | }, 1271 | { 1272 | "architecture": "s390x", 1273 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_s390x_linux_hotspot_17.0.1_12.tar.gz", 1274 | "openjdk_impl": "hotspot", 1275 | "os": "linux" 1276 | }, 1277 | { 1278 | "architecture": "aarch64", 1279 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_aarch64_mac_hotspot_17.0.1_12.tar.gz", 1280 | "openjdk_impl": "hotspot", 1281 | "os": "mac" 1282 | }, 1283 | { 1284 | "architecture": "x32", 1285 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x86-32_windows_hotspot_17.0.1_12.zip", 1286 | "openjdk_impl": "hotspot", 1287 | "os": "windows" 1288 | }, 1289 | { 1290 | "architecture": "arm", 1291 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_arm_linux_hotspot_17.0.1_12.tar.gz", 1292 | "openjdk_impl": "hotspot", 1293 | "os": "linux" 1294 | }, 1295 | { 1296 | "architecture": "ppc64le", 1297 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_ppc64le_linux_hotspot_17.0.1_12.tar.gz", 1298 | "openjdk_impl": "hotspot", 1299 | "os": "linux" 1300 | }, 1301 | { 1302 | "architecture": "x64", 1303 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.1%2B12/OpenJDK17U-jdk_x64_alpine-linux_hotspot_17.0.1_12.tar.gz", 1304 | "openjdk_impl": "hotspot", 1305 | "os": "alpine-linux" 1306 | } 1307 | ], 1308 | "openjdk_impl": "hotspot", 1309 | "release_name": "jdk-17.0.1+12" 1310 | }, 1311 | { 1312 | "binaries": [ 1313 | { 1314 | "architecture": "x64", 1315 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_x64_linux_hotspot_17_35.tar.gz", 1316 | "openjdk_impl": "hotspot", 1317 | "os": "linux" 1318 | }, 1319 | { 1320 | "architecture": "x64", 1321 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_x64_mac_hotspot_17_35.tar.gz", 1322 | "openjdk_impl": "hotspot", 1323 | "os": "mac" 1324 | }, 1325 | { 1326 | "architecture": "x64", 1327 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_x64_windows_hotspot_17_35.zip", 1328 | "openjdk_impl": "hotspot", 1329 | "os": "windows" 1330 | }, 1331 | { 1332 | "architecture": "aarch64", 1333 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_aarch64_linux_hotspot_17_35.tar.gz", 1334 | "openjdk_impl": "hotspot", 1335 | "os": "linux" 1336 | }, 1337 | { 1338 | "architecture": "s390x", 1339 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_s390x_linux_hotspot_17_35.tar.gz", 1340 | "openjdk_impl": "hotspot", 1341 | "os": "linux" 1342 | }, 1343 | { 1344 | "architecture": "aarch64", 1345 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_aarch64_mac_hotspot_17_35.tar.gz", 1346 | "openjdk_impl": "hotspot", 1347 | "os": "mac" 1348 | }, 1349 | { 1350 | "architecture": "ppc64le", 1351 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_ppc64le_linux_hotspot_17_35.tar.gz", 1352 | "openjdk_impl": "hotspot", 1353 | "os": "linux" 1354 | }, 1355 | { 1356 | "architecture": "arm", 1357 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_arm_linux_hotspot_17_35.tar.gz", 1358 | "openjdk_impl": "hotspot", 1359 | "os": "linux" 1360 | }, 1361 | { 1362 | "architecture": "x32", 1363 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_x86-32_windows_hotspot_17_35.zip", 1364 | "openjdk_impl": "hotspot", 1365 | "os": "windows" 1366 | }, 1367 | { 1368 | "architecture": "x64", 1369 | "binary_link": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17%2B35/OpenJDK17-jdk_x64_alpine-linux_hotspot_17_35.tar.gz", 1370 | "openjdk_impl": "hotspot", 1371 | "os": "alpine-linux" 1372 | } 1373 | ], 1374 | "openjdk_impl": "hotspot", 1375 | "release_name": "jdk-17+35" 1376 | } 1377 | ] 1378 | }, 1379 | { 1380 | "name": "OpenJDK 18 - HotSpot", 1381 | "releases": [ 1382 | { 1383 | "binaries": [ 1384 | { 1385 | "architecture": "x64", 1386 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_x64_windows_hotspot_18.0.2.1_1.zip", 1387 | "openjdk_impl": "hotspot", 1388 | "os": "windows" 1389 | }, 1390 | { 1391 | "architecture": "x32", 1392 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_x86-32_windows_hotspot_18.0.2.1_1.zip", 1393 | "openjdk_impl": "hotspot", 1394 | "os": "windows" 1395 | }, 1396 | { 1397 | "architecture": "aarch64", 1398 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_aarch64_mac_hotspot_18.0.2.1_1.tar.gz", 1399 | "openjdk_impl": "hotspot", 1400 | "os": "mac" 1401 | }, 1402 | { 1403 | "architecture": "x64", 1404 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_x64_mac_hotspot_18.0.2.1_1.tar.gz", 1405 | "openjdk_impl": "hotspot", 1406 | "os": "mac" 1407 | }, 1408 | { 1409 | "architecture": "aarch64", 1410 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_aarch64_linux_hotspot_18.0.2.1_1.tar.gz", 1411 | "openjdk_impl": "hotspot", 1412 | "os": "linux" 1413 | }, 1414 | { 1415 | "architecture": "s390x", 1416 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_s390x_linux_hotspot_18.0.2.1_1.tar.gz", 1417 | "openjdk_impl": "hotspot", 1418 | "os": "linux" 1419 | }, 1420 | { 1421 | "architecture": "x64", 1422 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_x64_linux_hotspot_18.0.2.1_1.tar.gz", 1423 | "openjdk_impl": "hotspot", 1424 | "os": "linux" 1425 | }, 1426 | { 1427 | "architecture": "arm", 1428 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_arm_linux_hotspot_18.0.2.1_1.tar.gz", 1429 | "openjdk_impl": "hotspot", 1430 | "os": "linux" 1431 | }, 1432 | { 1433 | "architecture": "ppc64le", 1434 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_ppc64le_linux_hotspot_18.0.2.1_1.tar.gz", 1435 | "openjdk_impl": "hotspot", 1436 | "os": "linux" 1437 | }, 1438 | { 1439 | "architecture": "x64", 1440 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2.1%2B1/OpenJDK18U-jdk_x64_alpine-linux_hotspot_18.0.2.1_1.tar.gz", 1441 | "openjdk_impl": "hotspot", 1442 | "os": "alpine-linux" 1443 | } 1444 | ], 1445 | "openjdk_impl": "hotspot", 1446 | "release_name": "jdk-18.0.2.1+1" 1447 | }, 1448 | { 1449 | "binaries": [ 1450 | { 1451 | "architecture": "x64", 1452 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_x64_linux_hotspot_18.0.2_9.tar.gz", 1453 | "openjdk_impl": "hotspot", 1454 | "os": "linux" 1455 | }, 1456 | { 1457 | "architecture": "ppc64le", 1458 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_ppc64le_linux_hotspot_18.0.2_9.tar.gz", 1459 | "openjdk_impl": "hotspot", 1460 | "os": "linux" 1461 | }, 1462 | { 1463 | "architecture": "x64", 1464 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_x64_windows_hotspot_18.0.2_9.zip", 1465 | "openjdk_impl": "hotspot", 1466 | "os": "windows" 1467 | }, 1468 | { 1469 | "architecture": "x64", 1470 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_x64_alpine-linux_hotspot_18.0.2_9.tar.gz", 1471 | "openjdk_impl": "hotspot", 1472 | "os": "alpine-linux" 1473 | }, 1474 | { 1475 | "architecture": "aarch64", 1476 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_aarch64_linux_hotspot_18.0.2_9.tar.gz", 1477 | "openjdk_impl": "hotspot", 1478 | "os": "linux" 1479 | }, 1480 | { 1481 | "architecture": "arm", 1482 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_arm_linux_hotspot_18.0.2_9.tar.gz", 1483 | "openjdk_impl": "hotspot", 1484 | "os": "linux" 1485 | }, 1486 | { 1487 | "architecture": "x32", 1488 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_x86-32_windows_hotspot_18.0.2_9.zip", 1489 | "openjdk_impl": "hotspot", 1490 | "os": "windows" 1491 | }, 1492 | { 1493 | "architecture": "s390x", 1494 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_s390x_linux_hotspot_18.0.2_9.tar.gz", 1495 | "openjdk_impl": "hotspot", 1496 | "os": "linux" 1497 | }, 1498 | { 1499 | "architecture": "aarch64", 1500 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_aarch64_mac_hotspot_18.0.2_9.tar.gz", 1501 | "openjdk_impl": "hotspot", 1502 | "os": "mac" 1503 | }, 1504 | { 1505 | "architecture": "x64", 1506 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.2%2B9/OpenJDK18U-jdk_x64_mac_hotspot_18.0.2_9.tar.gz", 1507 | "openjdk_impl": "hotspot", 1508 | "os": "mac" 1509 | } 1510 | ], 1511 | "openjdk_impl": "hotspot", 1512 | "release_name": "jdk-18.0.2+9" 1513 | }, 1514 | { 1515 | "binaries": [ 1516 | { 1517 | "architecture": "x64", 1518 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_x64_linux_hotspot_18.0.1_10.tar.gz", 1519 | "openjdk_impl": "hotspot", 1520 | "os": "linux" 1521 | }, 1522 | { 1523 | "architecture": "x64", 1524 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_x64_windows_hotspot_18.0.1_10.zip", 1525 | "openjdk_impl": "hotspot", 1526 | "os": "windows" 1527 | }, 1528 | { 1529 | "architecture": "x64", 1530 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_x64_mac_hotspot_18.0.1_10.tar.gz", 1531 | "openjdk_impl": "hotspot", 1532 | "os": "mac" 1533 | }, 1534 | { 1535 | "architecture": "aarch64", 1536 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_aarch64_linux_hotspot_18.0.1_10.tar.gz", 1537 | "openjdk_impl": "hotspot", 1538 | "os": "linux" 1539 | }, 1540 | { 1541 | "architecture": "ppc64le", 1542 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_ppc64le_linux_hotspot_18.0.1_10.tar.gz", 1543 | "openjdk_impl": "hotspot", 1544 | "os": "linux" 1545 | }, 1546 | { 1547 | "architecture": "x64", 1548 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_x64_alpine-linux_hotspot_18.0.1_10.tar.gz", 1549 | "openjdk_impl": "hotspot", 1550 | "os": "alpine-linux" 1551 | }, 1552 | { 1553 | "architecture": "s390x", 1554 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_s390x_linux_hotspot_18.0.1_10.tar.gz", 1555 | "openjdk_impl": "hotspot", 1556 | "os": "linux" 1557 | }, 1558 | { 1559 | "architecture": "arm", 1560 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_arm_linux_hotspot_18.0.1_10.tar.gz", 1561 | "openjdk_impl": "hotspot", 1562 | "os": "linux" 1563 | }, 1564 | { 1565 | "architecture": "x32", 1566 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_x86-32_windows_hotspot_18.0.1_10.zip", 1567 | "openjdk_impl": "hotspot", 1568 | "os": "windows" 1569 | }, 1570 | { 1571 | "architecture": "aarch64", 1572 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18.0.1%2B10/OpenJDK18U-jdk_aarch64_mac_hotspot_18.0.1_10.tar.gz", 1573 | "openjdk_impl": "hotspot", 1574 | "os": "mac" 1575 | } 1576 | ], 1577 | "openjdk_impl": "hotspot", 1578 | "release_name": "jdk-18.0.1+10" 1579 | }, 1580 | { 1581 | "binaries": [ 1582 | { 1583 | "architecture": "x64", 1584 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_x64_linux_hotspot_18_36.tar.gz", 1585 | "openjdk_impl": "hotspot", 1586 | "os": "linux" 1587 | }, 1588 | { 1589 | "architecture": "ppc64le", 1590 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_ppc64le_linux_hotspot_18_36.tar.gz", 1591 | "openjdk_impl": "hotspot", 1592 | "os": "linux" 1593 | }, 1594 | { 1595 | "architecture": "aarch64", 1596 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_aarch64_linux_hotspot_18_36.tar.gz", 1597 | "openjdk_impl": "hotspot", 1598 | "os": "linux" 1599 | }, 1600 | { 1601 | "architecture": "x64", 1602 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_x64_mac_hotspot_18_36.tar.gz", 1603 | "openjdk_impl": "hotspot", 1604 | "os": "mac" 1605 | }, 1606 | { 1607 | "architecture": "x64", 1608 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_x64_windows_hotspot_18_36.zip", 1609 | "openjdk_impl": "hotspot", 1610 | "os": "windows" 1611 | }, 1612 | { 1613 | "architecture": "x32", 1614 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_x86-32_windows_hotspot_18_36.zip", 1615 | "openjdk_impl": "hotspot", 1616 | "os": "windows" 1617 | }, 1618 | { 1619 | "architecture": "arm", 1620 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_arm_linux_hotspot_18_36.tar.gz", 1621 | "openjdk_impl": "hotspot", 1622 | "os": "linux" 1623 | }, 1624 | { 1625 | "architecture": "x64", 1626 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_x64_alpine-linux_hotspot_18_36.tar.gz", 1627 | "openjdk_impl": "hotspot", 1628 | "os": "alpine-linux" 1629 | }, 1630 | { 1631 | "architecture": "s390x", 1632 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_s390x_linux_hotspot_18_36.tar.gz", 1633 | "openjdk_impl": "hotspot", 1634 | "os": "linux" 1635 | }, 1636 | { 1637 | "architecture": "aarch64", 1638 | "binary_link": "https://github.com/adoptium/temurin18-binaries/releases/download/jdk-18%2B36/OpenJDK18U-jdk_aarch64_mac_hotspot_18_36.tar.gz", 1639 | "openjdk_impl": "hotspot", 1640 | "os": "mac" 1641 | } 1642 | ], 1643 | "openjdk_impl": "hotspot", 1644 | "release_name": "jdk-18+36" 1645 | } 1646 | ] 1647 | }, 1648 | { 1649 | "name": "OpenJDK 19 - HotSpot", 1650 | "releases": [ 1651 | { 1652 | "binaries": [ 1653 | { 1654 | "architecture": "x64", 1655 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_x64_linux_hotspot_19_36.tar.gz", 1656 | "openjdk_impl": "hotspot", 1657 | "os": "linux" 1658 | }, 1659 | { 1660 | "architecture": "x64", 1661 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_x64_windows_hotspot_19_36.zip", 1662 | "openjdk_impl": "hotspot", 1663 | "os": "windows" 1664 | }, 1665 | { 1666 | "architecture": "aarch64", 1667 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_aarch64_linux_hotspot_19_36.tar.gz", 1668 | "openjdk_impl": "hotspot", 1669 | "os": "linux" 1670 | }, 1671 | { 1672 | "architecture": "arm", 1673 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_arm_linux_hotspot_19_36.tar.gz", 1674 | "openjdk_impl": "hotspot", 1675 | "os": "linux" 1676 | }, 1677 | { 1678 | "architecture": "x64", 1679 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_x64_mac_hotspot_19_36.tar.gz", 1680 | "openjdk_impl": "hotspot", 1681 | "os": "mac" 1682 | }, 1683 | { 1684 | "architecture": "aarch64", 1685 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_aarch64_mac_hotspot_19_36.tar.gz", 1686 | "openjdk_impl": "hotspot", 1687 | "os": "mac" 1688 | }, 1689 | { 1690 | "architecture": "x64", 1691 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_x64_alpine-linux_hotspot_19_36.tar.gz", 1692 | "openjdk_impl": "hotspot", 1693 | "os": "alpine-linux" 1694 | }, 1695 | { 1696 | "architecture": "ppc64le", 1697 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_ppc64le_linux_hotspot_19_36.tar.gz", 1698 | "openjdk_impl": "hotspot", 1699 | "os": "linux" 1700 | }, 1701 | { 1702 | "architecture": "s390x", 1703 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_s390x_linux_hotspot_19_36.tar.gz", 1704 | "openjdk_impl": "hotspot", 1705 | "os": "linux" 1706 | }, 1707 | { 1708 | "architecture": "x32", 1709 | "binary_link": "https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19%2B36/OpenJDK19U-jdk_x86-32_windows_hotspot_19_36.zip", 1710 | "openjdk_impl": "hotspot", 1711 | "os": "windows" 1712 | } 1713 | ], 1714 | "openjdk_impl": "hotspot", 1715 | "release_name": "jdk-19+36" 1716 | } 1717 | ] 1718 | } 1719 | ], 1720 | "version": 2 1721 | } 1722 | --------------------------------------------------------------------------------