【发布时间】:2023-02-20 15:49:55
【问题描述】:
Gradle 6.7 引入了Java toolchains。
在文档中,他们声明Gradle 选择符合构建要求的 JRE/JDK ... 默认情况下,Gradle 更喜欢安装的 JDK 而不是 JRE ...(来自docs.gradle.org: Toolchains for JVM projects)。
因此,如果我们同时安装了 JRE 和 JDK,则选择 JDK。
问题:
假设用户只安装了一个 JRE。
然而,我们希望使用 Java 工具链通过 Gradle(JavaExec 任务)运行我们的应用程序,但必须确保使用 JDK 运行,因为该应用程序依赖于 tools.jar,它不是 JRE 的一部分。
问题:
在使用 Java 工具链时,是否可以强制 Gradle 将 JDK 用于所有任务(包括运行/启动),而不仅仅是编译? (请参阅以下带注释的最小示例)
// This build.gradle should ensure that the application is run using a JDK of version 9
plugins {
id 'application'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(9)
// QUESTION: How to force JDK here? <------
}
}
// for JavaExec task runJar
tasks.withType(JavaExec).configureEach {
javaLauncher = javaToolchains.launcherFor(java.toolchain)
}
task runJar(type: JavaExec) {
classpath = files(jar.archiveFile)
}
...
【问题讨论】:
-
@MartinZeitler:不,这没有回答我的问题。我不关心使用哪个 Java 版本来运行Gradle守护进程,我也不想手动将 JDK 路径设置到某个位置。我想使用 Java 工具链来构建和运行,并且在这两种情况下都想使用 JDK,而不是 JRE。但是感谢您参考另一个问题!
-
JDK 包含 JRE ...并且 Gradle 将链接到
rt.jar,无论您是否喜欢。我对此非常确定,因为如果没有它在类路径上,我的 Gradle 插件 javadocs 将无法构建。
标签: java gradle build.gradle build-system gradle-java-toolchain