如何解决使用Java 8编译Gradle Java项目,但使用Java 11运行测试
作为我的项目过渡过程的第一部分,我想继续使用JDK-8编译器进行编译,但是要使用JDK-11运行时执行测试。
我的项目是使用java
插件或java-library
插件的Gradle项目(如果需要的话,为6。+)。
我找不到使用Gradle选项的方法。
我尝试使用JDK-8在一个终端中编译(gradlew build
),然后使用JDK 11切换到另一个终端并运行测试(gradlew test
),但是它重新编译了代码
正确的方法是什么?
解决方法
您可以使用与用于运行Gradle的JDK不同的JDK配置所有与Java相关的任务(编译,测试,JavaExec,JavaDoc等)。 user guide中有一章提供了一个示例,说明如何使用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")
}
用户指南具有更可配置的解决方案,但这就是要点。
即将推出的6.7版Gradle中的一项很酷的功能是对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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。