Gradle:对构建和测试使用不同的jre

时间:2019-01-03 19:56:55

标签: java gradle

这是我的情况,我有一个Java项目以及一些单元测试。

我的单元测试请求Java 1.8,因为它们使用的是Stream和Arguments.of

我的Java源代码需要使用Java 1.7构建,因为它们要在Matlab中导入-不幸的是Matlab无法理解Java 1.8

我有解决方案使两者一起工作吗?

3 个答案:

答案 0 :(得分:1)

您应该能够使用JDK 8构建项目并设置不同的兼容性级别。根据{{​​3}},您可以尝试将以下内容添加到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中的错误,就可以了。

答案 1 :(得分:1)

编译时需要指定targetCompatibility。这通常是在Gradle构建文件的根目录级别指定的,但是由于您希望测试代码为其他版本,因此您需要为compileJava任务明确指定它。

您还应该指定一个Java 7 Runtime库,因此,假设您使用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

答案 2 :(得分:0)

从 Gradle 6.7 开始,可以使用 Java 工具链设置 Java 版本 - https://blog.gradle.org/java-toolchains