You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Gradle在Java工具链中为所有任务(含运行)使用JDK?

强制Gradle Java工具链为所有任务使用JDK

Gradle 6.7引入了Java工具链(Java toolchains)。官方文档说明:

Gradle会选择符合构建要求的JRE/JDK……默认情况下,Gradle优先选择已安装的JDK而非JRE……

但如果用户仅安装了JRE,而我们的应用依赖仅存在于JDK中的tools.jar,就需要确保Gradle的所有任务(包括运行/启动类任务,不止编译)都强制使用JDK。

解决方案

可以通过Java工具链的implementation属性强制指定使用JDK实现,修改你的构建脚本如下:

// 确保应用使用JDK 9运行
plugins {
    id 'application'
}
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(9)
        // 强制选择JDK而非JRE
        implementation = JvmImplementation.JDK
    }
}
// 为所有JavaExec任务配置工具链
tasks.withType(JavaExec).configureEach {
    javaLauncher = javaToolchains.launcherFor(java.toolchain)
}
task runJar(type: JavaExec) {
    classpath = files(jar.archiveFile)
}
...

说明

  • implementation = JvmImplementation.JDK 会让Gradle在查找工具链时,只筛选JDK类型的安装包,完全忽略JRE。
  • 如果系统中没有匹配版本的JDK,Gradle会根据你的自动下载配置(若已开启)尝试下载对应版本的JDK;若未开启自动下载,构建会直接失败并提示找不到符合要求的JDK工具链。
  • 通过tasks.withType(JavaExec).configureEach的配置,能确保所有自定义的JavaExec任务(比如示例中的runJar)都遵循这个强制使用JDK的规则,application插件自带的run任务也会自动继承工具链的配置。

内容的提问来源于stack exchange,提问作者Markus Weninger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:15:39