[英]Gradle: use different jre for Build and Tests
这是我的情况,我有一个 Java 项目和一些单元测试。
我的单元测试请求 java 1.8,因为它们使用 Stream 和 Arguments.of
我的 java 源代码需要用 java 1.7 构建,因为它们要导入到 Matlab 中 - 不幸的是 Matlab 不理解 java 1.8
我有办法让两者一起工作吗?
您应该能够使用 JDK 8 构建项目并设置不同的兼容性级别。 根据 Java 插件 > 其他约定属性,您可以尝试将以下添加到build.gradle
:
plugins {
id 'java'
}
compileJava {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
compileTestJava {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
Java 努力保持向后兼容性。 只要您不会遇到 JDK 8 中已修复但仍存在于 JDK 7 中的错误,您应该没问题。
编译时需要指定targetCompatibility
。 这通常在 Gradle 构建文件的根级别指定,但由于您希望测试代码为不同版本,因此您需要为compileJava
任务显式指定它。
您还应该指定一个 Java 7 运行时库,因此假设您使用 Java 8 运行 Gradle ,您的构建文件将是这样的:
apply plugin: 'java'
// options used by all compile tasks unless overridden, e.g. used by compileTestJava
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava {
// override global options just for this task
sourceCompatibility = 1.7
targetCompatibility = 1.7
options.bootClasspath = 'path/to/java7/lib/rt.jar'
}
// and all your other stuff
从 Gradle 6.7 开始,可以使用 Java 工具链设置 Java 版本 - https://blog.gradle.org/java-toolchains
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.