繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM