如何在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的回答中指出的,你必须配置compileKotlincompileTestKotlin 。 你可以这样做,不用重复:

 tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } } 

对于一个纯Kotlin项目,我不认为选项sourceCompatibilitytargetCompatibility做任何事情,所以你可能会删除它们。

参考: 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类文件。 看到

https://blog.jetbrains.com/kotlin/2016/07/first-glimpse-of-kotlin-1-1-coroutines-type-aliases-and-more/

讨论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。