如何将 Kotlin 代码编译为 jvmTarget="1.8" 进行测试

Chr*_*iss 5 android gradle kotlin android-gradle-plugin junit5

在我们的 Android 项目中,我们使用 Kotlin 进行编码并以 java 1.6 为目标。然而,我们在测试中被迫使用 java 1.8,因为一些 JUnit5 功能需要它(接口中的静态方法)。

是否可以以不同于生产代码的方式编译测试?

我们试图通过将其添加到我们的 build.gradle 中来将 jvmTarget 提高到 1.8:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
}
Run Code Online (Sandbox Code Playgroud)

这也会提高生产代码的 jvmTarget,但我们只需要它用于测试。文档表明可以这样指定测试:

compileReleaseUnitTestKotlin{
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的build.gradle是无法编译。

pem*_*ahl 4

Kotlin 文档仅提及如何进行测试。

Groovy DSL:

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)

科特林 DSL:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

val compileTestKotlin: KotlinCompile by tasks

compileTestKotlin.kotlinOptions.jvmTarget = "1.8"
Run Code Online (Sandbox Code Playgroud)