如何在Gradle项目中将Kotlin的字节码版本设置为Java 8?
在Kotlin项目中,什么是适当的Gradle脚本来确保我的类将被编译为字节代码ver 52(Java 8)?
出于某种原因,我的类被编译为ver 50(Java 6),即使我设置了源和目标兼容性。 至少这是Idea在构建项目之后从目录build/classes/...
打开文件时显示的内容。
我目前的设置是这样的。
buildscript { ext { kotlinVersion = '1.0.5-2' springBootVersion = '1.4.2.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") } } apply plugin: 'kotlin' apply plugin: 'org.springframework.boot' tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } ## I also tried this and it hasn't helped #sourceCompatibility = 1.8 #targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") compile('org.springframework.cloud:spring-cloud-starter-stream-rabbit') } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2" } }
正如Mark在Debop的回答中指出的,你必须配置compileKotlin
和compileTestKotlin
。 你可以这样做,不用重复:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }
对于一个纯Kotlin项目,我不认为选项sourceCompatibility
和targetCompatibility
做任何事情,所以你可能会删除它们。
参考: https : //kotlinlang.org/docs/reference/using-gradle.html#compiler-options
在Gradle的Kotlin 1.1。 在控制台中你有inline
错误(你安装的编译器是1.0.x)如果在IntelliJ IDEA中运行gradle任务,你的代码由kotlin 1.1编译器编译
compileKotlin { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 kotlinOptions { jvmTarget = "1.8" apiVersion = "1.1" languageVersion = "1.1" } }
Kotlin 1.0总是生成Java 6类文件。 Kotlin 1.1将通过将-jvm-target 1.8
传递给编译器来支持生成Java 8类文件。 看到
讨论Java 7/8的支持。
如果有人用kotlin-dsl而不是groovy使用gradle:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile // compile bytecode to java 8 (default is java 6) tasks.withType { kotlinOptions.jvmTarget = "1.8" }
对于像我这样使用maven在intellij中构建kotlin和java的混合代码的人,您需要设置
1.8
因为maven构建不尊重在项目设置中设置的jvmTarget。