如果您的 CI/CD 平台没有专用的 Temurin 设置任务(例如 GitHub Actions),您可以使用 Adoptium API 直接下载、验证和安装 Eclipse Temurin。本指南介绍如何通过 Shell 脚本使用该 API,适用于任何 CI 环境,包括 Azure DevOps、GitLab CI、Jenkins、CircleCI 等。
API 概述
Adoptium API 提供了用于下载 Temurin 二进制文件的稳定 URL。下载最新 GA 版本的通用 URL 格式为:
https://api.adoptium.net/v3/binary/latest/{version}/ga/{os}/{arch}/{image_type}/hotspot/normal/eclipse
其中:
-
{version}— Java 主版本号(例如8、11、17、21、25) -
{os}— 操作系统:linux、windows、mac、alpine-linux、aix、solaris -
{arch}— 架构:x64、aarch64、arm、ppc64le、s390x、riscv64 -
{image_type}—jdk或jre
Note
并非所有组合都可用。如果指定组合不存在构建版本,API 将返回 HTTP 404。
查询可用版本
您可以查询哪些版本可用,包括当前的 LTS:
# Get the most recent LTS version
curl -s https://api.adoptium.net/v3/info/available_releases | jq '.most_recent_lts'
# List all available LTS releases
curl -s https://api.adoptium.net/v3/info/available_releases | jq '.available_lts_releases'
下载二进制文件
Linux / macOS
#!/bin/bash
set -euo pipefail
JAVA_VERSION="25"
OS="linux"
ARCH="x64"
IMAGE_TYPE="jdk"
API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/${OS}/${ARCH}/${IMAGE_TYPE}/hotspot/normal/eclipse"
# Download the binary (follows redirects)
FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")
echo "Downloaded ${FILENAME}"
Windows (PowerShell)
$JavaVersion = "25"
$ApiUrl = "https://api.adoptium.net/v3/binary/latest/$JavaVersion/ga/windows/x64/jdk/hotspot/normal/eclipse"
$Response = Invoke-WebRequest -Uri $ApiUrl -MaximumRedirection 0 -ErrorAction SilentlyContinue
$DownloadUrl = $Response.Headers.Location
$FileName = [System.IO.Path]::GetFileName($DownloadUrl)
Invoke-WebRequest -Uri $DownloadUrl -OutFile $FileName
Write-Host "Downloaded $FileName"
验证下载
Eclipse Temurin 每个发布版本都随附 SHA-256 校验和及 GPG 签名。Adoptium 项目强烈建议在 CI/CD 流水线中验证您的下载,以确保完整性和真实性。
SHA-256 校验和验证
校验和文件与二进制文件位于同一 URL,后缀为 .sha256.txt:
# Download and verify the checksum in one step
curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
echo "Checksum verified successfully"
Windows 上使用 PowerShell:
# Download expected checksum
$ExpectedHash = (Invoke-WebRequest -Uri "$DownloadUrl.sha256.txt").Content.Split(" ")[0]
# Compute actual hash
$ActualHash = (Get-FileHash $FileName -Algorithm SHA256).Hash
if ($ExpectedHash -ne $ActualHash) {
Write-Error "Checksum verification failed!"
exit 1
}
Write-Host "Checksum verified successfully"
GPG 签名验证
Temurin 发布版本使用 Adoptium GPG 密钥签名。签名文件与二进制 URL 相同,后缀为 .sig:
# Import the Adoptium GPG public key
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --import
# Download the signature file
curl -OLs "${FETCH_URL}.sig"
# Verify the signature
gpg --verify "${FILENAME}.sig" "${FILENAME}"
完整 CI 脚本示例
以下是适用于任何 CI/CD 流水线的完整脚本,用于下载、验证和安装 Eclipse Temurin:
#!/bin/bash
set -euo pipefail
# Configuration
JAVA_VERSION="${JAVA_VERSION:-25}"
OS="${OS:-linux}"
ARCH="${ARCH:-x64}"
IMAGE_TYPE="${IMAGE_TYPE:-jdk}"
API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/${OS}/${ARCH}/${IMAGE_TYPE}/hotspot/normal/eclipse"
echo "Downloading Eclipse Temurin ${JAVA_VERSION} (${OS}/${ARCH})..."
# Download the binary
FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")
# Verify SHA-256 checksum
echo "Verifying checksum..."
curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
echo "Checksum OK"
# Extract and configure
INSTALL_DIR="/opt/java/${JAVA_VERSION}"
mkdir -p "${INSTALL_DIR}"
tar xzf "${FILENAME}" -C "${INSTALL_DIR}" --strip-components=1
# Set environment variables
export JAVA_HOME="${INSTALL_DIR}"
export PATH="${JAVA_HOME}/bin:${PATH}"
echo "Eclipse Temurin ${JAVA_VERSION} installed to ${JAVA_HOME}"
java -version
特定平台示例
Azure DevOps
steps:
- script: |
JAVA_VERSION="25"
API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/linux/x64/jdk/hotspot/normal/eclipse"
FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")
curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
mkdir -p /opt/java && tar xzf "${FILENAME}" -C /opt/java --strip-components=1
echo "##vso[task.setvariable variable=JAVA_HOME]/opt/java"
echo "##vso[task.prependpath]/opt/java/bin"
displayName: 'Install Eclipse Temurin 25'
GitLab CI
install-temurin:
before_script:
- |
JAVA_VERSION="25"
API_URL="https://api.adoptium.net/v3/binary/latest/${JAVA_VERSION}/ga/linux/x64/jdk/hotspot/normal/eclipse"
FETCH_URL=$(curl -s -w %{redirect_url} "${API_URL}")
FILENAME=$(curl -OLs -w %{filename_effective} "${FETCH_URL}")
curl -Ls "${FETCH_URL}.sha256.txt" | sha256sum -c --status
tar xzf "${FILENAME}" -C /opt --strip-components=1
export JAVA_HOME=/opt
export PATH="${JAVA_HOME}/bin:${PATH}"
java -version
Jenkins(脚本化流水线)
node {
stage('Install Temurin') {
sh '''
JAVA_VERSION="25"
API_URL="https://api.adoptium.net/v3/binary/latest/$JAVA_VERSION/ga/linux/x64/jdk/hotspot/normal/eclipse"
FETCH_URL=$(curl -s -w %{redirect_url} "$API_URL")
FILENAME=$(curl -OLs -w %{filename_effective} "$FETCH_URL")
curl -Ls "$FETCH_URL.sha256.txt" | sha256sum -c --status
tar xzf "$FILENAME" -C /opt --strip-components=1
'''
env.JAVA_HOME = '/opt'
env.PATH = "${env.JAVA_HOME}/bin:${env.PATH}"
}
}
