Skip to content

Toolchain 工具链

Java Toolchain 允许精确指定构建和运行时使用的 JDK 版本,即使构建机器上安装的 JDK 版本不同。

基本配置

kotlin
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
    }
}

Gradle 会自动发现系统上已安装的 JDK,找不到时自动从 Eclipse Adoptium 下载。

指定 JDK 供应商

kotlin
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
        vendor.set(JvmVendorSpec.ADOPTIUM)  // Eclipse Temurin
        // vendor.set(JvmVendorSpec.AMAZON)  // Amazon Corretto
        // vendor.set(JvmVendorSpec.BELLSOFT) // Liberica
        // vendor.set(JvmVendorSpec.GRAAL_VM) // GraalVM
    }
}

针对特定任务配置 JDK

kotlin
// 使用特定 JDK 版本编译
tasks.named<JavaCompile>("compileJava") {
    javaCompiler.set(javaToolchains.compilerFor {
        languageVersion.set(JavaLanguageVersion.of(21))
    })
}

// 使用特定 JDK 版本运行测试
tasks.named<Test>("test") {
    javaLauncher.set(javaToolchains.launcherFor {
        languageVersion.set(JavaLanguageVersion.of(17))
    })
}

查看可用 JDK

bash
# 查看 Gradle 发现的 JDK
./gradlew -q javaToolchains

# 输出示例:
# + Options
#   | Auto-detection:     Enabled
#   | Auto-download:      Enabled
#
# + Eclipse Adoptium JDK 17.0.9+9 (x86_64)
#   | Location:           /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
#   | Language Version:   17
#   | Vendor:             Eclipse Adoptium
#
# + Oracle JDK 21+35 (x86_64)
#   | Location:           /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home
#   | Language Version:   21
#   | Vendor:             Oracle

在 CI 中使用 Toolchain

yaml
# .github/workflows/build.yml
- name: Set up JDK 17
  uses: actions/setup-java@v4
  with:
    java-version: '17'
    distribution: 'temurin'

- name: Build
  run: ./gradlew build
  # Gradle 自动发现 setup-java 安装的 JDK

禁用自动下载

properties
# gradle.properties
org.gradle.java.installations.auto-download=false

下一步