使用 Java 8 编译 Gradle Java 项目,但使用 Java 11 运行 测试
Compiling a Gradle Java project with Java 8 but running tests with Java 11
作为我的项目过渡过程的第一部分,我想继续使用 JDK-8 编译器进行编译,但使用 JDK-11 运行time 执行测试.
我的项目是 Gradle 个项目(6.+,如果重要的话),使用 java
插件或 java-library
插件。
我找不到使用 Gradle 选项的方法。
我尝试在一个终端中使用 JDK-8 编译 (gradlew build
),然后切换到另一个终端使用 JDK 11 和 运行 测试 ( gradlew test
), 但它重新编译了代码。
正确的做法是什么?
您可以使用与 JDK 不同的 JDK 配置所有 Java-related 任务(编译、测试、JavaExec、JavaDoc 等) =40=] Gradle。 user guide 中有一章给出了一个示例,说明如何 运行 Gradle 与 Java 8 但在所有任务中使用 Java 7。它与 Java 11.
相同
对于您的项目,您可以使用 Java 8 继续 运行ning Gradle,但为不同版本的 运行ning 测试添加以下内容:
// Gradle <= 6.6 (Groovy DSL)
tasks.withType(Test) {
executable = new File("/my/path/to/jdk11/bin/java")
}
用户指南有一个更可配置的解决方案,但这是它的要点。
Gradle 即将发布的 6.7 版中的一项很酷的功能是对 JVM 工具链的支持。就像现在一样,您必须自己下载一个 JDK 11 发行版并配置它的路径。较新的版本将允许您声明版本并让 Gradle 为您下载(来自 AdoptOpenJDK)如果缺少:
// Gradle >= 6.7 (Groovy DSL)
// Unreleased at the time of this writing and the syntax is therefore subject to change
test {
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(11)
}
}
最后一个选项是 运行 Gradle 和 Java 11 并使编译器目标 Java 8 使用 release
选项:
// Run Gradle with Java 11
compileJava {
options.release = 8
}
作为我的项目过渡过程的第一部分,我想继续使用 JDK-8 编译器进行编译,但使用 JDK-11 运行time 执行测试.
我的项目是 Gradle 个项目(6.+,如果重要的话),使用 java
插件或 java-library
插件。
我找不到使用 Gradle 选项的方法。
我尝试在一个终端中使用 JDK-8 编译 (gradlew build
),然后切换到另一个终端使用 JDK 11 和 运行 测试 ( gradlew test
), 但它重新编译了代码。
正确的做法是什么?
您可以使用与 JDK 不同的 JDK 配置所有 Java-related 任务(编译、测试、JavaExec、JavaDoc 等) =40=] Gradle。 user guide 中有一章给出了一个示例,说明如何 运行 Gradle 与 Java 8 但在所有任务中使用 Java 7。它与 Java 11.
相同对于您的项目,您可以使用 Java 8 继续 运行ning Gradle,但为不同版本的 运行ning 测试添加以下内容:
// Gradle <= 6.6 (Groovy DSL)
tasks.withType(Test) {
executable = new File("/my/path/to/jdk11/bin/java")
}
用户指南有一个更可配置的解决方案,但这是它的要点。
Gradle 即将发布的 6.7 版中的一项很酷的功能是对 JVM 工具链的支持。就像现在一样,您必须自己下载一个 JDK 11 发行版并配置它的路径。较新的版本将允许您声明版本并让 Gradle 为您下载(来自 AdoptOpenJDK)如果缺少:
// Gradle >= 6.7 (Groovy DSL)
// Unreleased at the time of this writing and the syntax is therefore subject to change
test {
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(11)
}
}
最后一个选项是 运行 Gradle 和 Java 11 并使编译器目标 Java 8 使用 release
选项:
// Run Gradle with Java 11
compileJava {
options.release = 8
}