java - 使用Java 8编译Gradle Java项目但使用Java 11运行测试

标签 java gradle java-11 openjdk-11

作为项目过渡过程的第一部分,我想继续使用JDK-8编译器进行编译,但是要使用JDK-11运行时执行测试。
我的项目是使用java插件或java-library插件的Gradle项目(如果需要的话,为6. +)。
我找不到使用Gradle选项执行此操作的方法。
我尝试使用JDK-8在一个终端中编译(gradlew build),然后使用JDK 11切换到另一个终端并运行测试(gradlew test),但是它重新编译了代码。
正确的方法是什么?

最佳答案

您可以使用不同于用于运行Gradle的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
}

关于java - 使用Java 8编译Gradle Java项目但使用Java 11运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64319620/

相关文章:

java - 用Java分割和大写字符串中的单词

java - 在 ArrayList 的开头添加一个元素的时间复杂度是多少?

android - 我们可以将 gson 模型与 realm 一起使用吗?当我尝试时它显示构建时间错误

javax.imageio.IIOException : Can't create an ImageInputStream in Tomcat 9, OpenJDK 11 和 Geoserver

java - 使用 JDK 11 在 Mac 上打开 .jar 文件失败并出现 RuntimeException

java - 总结所有以前的数字

java - 扫描仪对象 - 分割字符串

gradle - 如何在不修改 settings.gradle 的情况下添加 gradle 项目依赖项

android - 为 Google Play 服务版本构建 gradle 失败

kotlin - 如何修复 Guice 错误, "An illegal reflective access operation has occurred"