有什么区别
java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 }
和
compileKotlin { kotlinOptions { jvmTarget = "11" } }
它们在gradle/Kotlin库中是否都能达到相同的最终结果?我理解,jvmTarget是用于设置要使用的标准库版本。
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+以来)是一个工具链:
kotlinOptions.jvmTarget
-bootclasspath
java.sourceCompatibility
java.targetCompatibility
kotlin { jvmToolchain { (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(11)) } } // Or its eqivalent: java { toolchain { languageVersion.set(JavaLanguageVersion.of(11)) } }
1条答案
按热度按时间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+以来)是一个工具链: