使用 Kotlin 和 Gradle 定位特定的 JVM
Target specific JVM with Kotlin and Gradle
有什么区别
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
和
compileKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
他们会在 gradle/Kotlin-library 中达到相同的最终结果吗? jvmTarget 是为了设置使用哪个标准库版本,我明白了。
kotlinOptions.jvmTarget
用于指定 JVM 标准库的版本,用作编译 JVM 特定的 Kotlin 源集的依赖项(参见 javac 的 https://kotlinlang.org/docs/gradle.html#dependency-on-the-standard-library and -bootclasspath
选项).
java.sourceCompatibility
确保 .java 文件使用指定版本的 Java 编程语言语法
java.targetCompatibility
确保生成的 .class 文件与指定的 JVM
兼容
因此,这些选项并不等同。
无论如何,定义交叉编译参数的现代(自 Gradle 6.7+ 和 Kotlin 1.5.30+)方式是 toolchain:
kotlin {
jvmToolchain {
(this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11))
}
}
// Or its eqivalent:
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(11))
}
}
有什么区别
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
和
compileKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
他们会在 gradle/Kotlin-library 中达到相同的最终结果吗? jvmTarget 是为了设置使用哪个标准库版本,我明白了。
kotlinOptions.jvmTarget
用于指定 JVM 标准库的版本,用作编译 JVM 特定的 Kotlin 源集的依赖项(参见 javac 的 https://kotlinlang.org/docs/gradle.html#dependency-on-the-standard-library and -bootclasspath
选项).
java.sourceCompatibility
确保 .java 文件使用指定版本的 Java 编程语言语法
java.targetCompatibility
确保生成的 .class 文件与指定的 JVM
因此,这些选项并不等同。
无论如何,定义交叉编译参数的现代(自 Gradle 6.7+ 和 Kotlin 1.5.30+)方式是 toolchain:
kotlin {
jvmToolchain {
(this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11))
}
}
// Or its eqivalent:
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(11))
}
}