java - 使用 Java 8 编译 Gradle Java 项目,但使用 Java 11 运行测试
问题描述
作为项目过渡过程的第一部分,我想继续使用 JDK-8 编译器进行编译,但使用 JDK-11 运行时执行测试。
java
我的项目是使用插件或插件的 Gradle 项目(如果重要,则为 6.+)java-library
。
我找不到使用 Gradle 选项的方法。
我尝试gradlew build
使用 JDK-8 在一个终端中编译(),然后使用 JDK 11 切换到另一个终端并运行测试(gradlew test
),但它重新编译了代码。
正确的方法是什么?
解决方案
您可以使用与运行 Gradle 不同的 JDK 配置所有与 Java 相关的任务(编译、测试、JavaExec、JavaDoc 等)。用户指南中有一个章节提供了一个示例,说明如何使用 Java 8 运行 Gradle,但在所有任务中都使用 Java 7。它与 Java 11 相同。
对于您的项目,您可以继续使用 Java 8 运行 Gradle,但添加以下内容以使用不同版本运行测试:
// 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)
}
}
最后一个选项是使用 Java 11 运行 Gradle,并使用以下release
选项使编译器以 Java 8 为目标:
// Run Gradle with Java 11
compileJava {
options.release = 8
}
推荐阅读
- sap - Mosquitto 代理桥代理不可用 - SAP IoT
- java - Guava Google 在 Java 中使用反射
- debugging - 如何在 Visual Studio Code (VSCode) 中调试 Cucumber - Protractor?
- c# - 通过 ajax 更新多个 div
- google-apps-script - 向 Copyto 函数添加 IF(背景颜色)条件
- react-native - OrbitControls 无法正常工作
- expo - Fastlane 从 Expo 构建 URL 向 TestFlight 提供 .ipa 文件
- aws-lambda - 在 Quarkus Amazon Lambda HTTP 指南中,Lambda 运行时在类路径上找不到 QuarkusStreamHandler
- java - 在测试失败时,WebDriverEventListener 的方法“beforeGetScreenshotAs”会持续运行。这种方法的最佳实现是什么?
- deep-learning - 在 Google Colab 的 pytorch 下使 CUDA 内存不足