如何在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" } } 

5 Solutions collect form web for “如何在Gradle项目中将Kotlin的字节码版本设置为Java 8?”

正如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。

  • 为什么Kotlin比Scala编译速度更快?
  • Kotlin方法通用typesvalidation
  • 如何为kotlin中的函数参数设置不为null
  • Kotlin`shl`不工作
  • 在Kotlin中按多个字段排序收集
  • 在Kotlin比赛后写入文件
  • 为什么Kotlin中的'as'并没有在这种情况下施展
  • 在Kotlin中推断一个通用types的地图
  • 在Kotlin重复字符串n次
  • Android中的Kotlin“内部”​​可见性修改器
  • Kotlin:从Java调用NoSuchMethod时
  • Kotlin language will be the best programming language for Android.