使用 Kotlin 和 Gradle 瞄准特定 JVM

Bea*_*mie 3 jvm target kotlin

有什么区别

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}
Run Code Online (Sandbox Code Playgroud)

compileKotlin {
    kotlinOptions {
        jvmTarget = "11"
    }
}
Run Code Online (Sandbox Code Playgroud)

他们会在 gradle/Kotlin 库中获得相同的最终结果吗?jvmTarget 用于设置要使用的标准库版本,我明白。

Мих*_*аль 5

kotlinOptions.jvmTarget用于指定 JVM 标准库的版本,用作编译特定于 JVM 的 Kotlin 源集的依赖项(请参阅https://kotlinlang.org/docs/gradle-configure-project.html#dependency-on-the -标准库-bootclasspathjavac 选项)。

java.sourceCompatibility确保 .java 文件使用指定版本的 Java 编程语言语法

java.targetCompatibility确保生成的 .class 文件与指定的 JVM 兼容

因此,这些选项并不等同。

无论如何,定义交叉编译参数的现代方式(自 Gradle 6.7+ 和 Kotlin 1.5.30+ 起)是工具

kotlin {
    jvmToolchain {
        (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11))
    }
}

// Or its eqivalent:

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}
Run Code Online (Sandbox Code Playgroud)