我有一个使用 Gradle 构建的 Java 项目,它具有不同的代码路径,具体取决于 JRE 位数。我正在为内部编写 JUnit 5 测试,但我需要在 64 位和 32 位 JRE 上运行它们。
此外,出于面向未来的原因,我希望能够使用不同的 JRE 版本进行测试。目前该项目的目标是 Java 17,但我还想使用 Java 21(也是 64 位和 32 位)进行测试。目前这在某种程度上是可选的,但却是一个有价值的奖励。
开发是在 IntelliJ Idea (Windows) 上完成的,但测试不必在 IntelliJ 内使用上述所有 JRE 运行。如果可以的话,这将是另一个奖励。
我找到了几个相关的插件,但它们似乎不包括 JRE 位数选择。
注意:位数差异的原因是运行时使用了不同的本机二进制文件。
以下示例介绍了如何设置在 Oracle JVM 版本 21 中运行测试的测试任务(使用 Kotlin DSL)。
plugins {
java
`jvm-test-suite`
}
testing {
suites {
val test by getting(JvmTestSuite::class) {
useJUnitJupiter()
}
register<JvmTestSuite>("testWithOracleJava21") {
dependencies {
implementation(project())
}
targets {
all {
testTask {
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(21)
vendor = JvmVendorSpec.ORACLE
}
}
}
}
}
}
}
Gradle 将在您的计算机中搜索与您指定的版本和供应商匹配的安装。这不允许您直接指定目标架构,但希望供应商字段允许您将 Gradle 唯一地指向您想要用于每个测试的 JVM。