使用Kotlin和Gradle定位特定JVM

7cjasjjr  于 2022-11-07  发布在  Kotlin
关注(0)|答案(1)|浏览(148)

有什么区别

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

compileKotlin {
    kotlinOptions {
        jvmTarget = "11"
    }
}

它们在gradle/Kotlin库中是否都能达到相同的最终结果?我理解,jvmTarget是用于设置要使用的标准库版本。

syqv5f0l

syqv5f0l1#

kotlinOptions.jvmTarget用于指定JVM标准库的版本,该标准库用作编译JVM特定的Kotlin源代码集的依赖项(请参见https://kotlinlang.org/docs/gradle.html#dependency-on-the-standard-library和javac的-bootclasspath选项)。
java.sourceCompatibility确保.java文件使用指定版本的Java编程语言语法
java.targetCompatibility确保生成的.class文件将与指定的JVM兼容
因此,这些选项并不等效。
无论如何,定义交叉编译参数的现代方式(自Gradle 6.7+和Kotlin1.5.30+以来)是一个工具链:

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

// Or its eqivalent:

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

相关问题