Kotlin支持Java 11吗?

dha*_*sav 27 jvm gradle kotlin

我正在尝试使用Kotlin V1.2.70,Gradle V4.10.1和Java 11.使用gradle编译项目时,出现错误"未知的JVM目标版本:11.支持的版本:1.6,1.8".

Kotlin编译器是否支持Java 11(生成与Java 11 JVM兼容的代码)?如果是这样,如何使用gradle配置?

yol*_*ole 27

当目标版本设置为1.6或1.8时,Kotlin编译器生成的字节码与JVM 11完全兼容.

  • build.gradle中的JVM目标版本指定Kotlin编译器生成的字节码的版本.它与用于执行Gradle任务的JVM版本无关.再次:将jvmTarget设置为1.8,不要担心其他任何事情,一切都会奏效. (3认同)
  • @Suresh它会在某个时候添加,但我不能给出任何具体的时间表. (3认同)
  • 否。用于运行Kotlin编译器的JVM版本与编译器生成的字节码版本无关。 (2认同)

Mal*_*ppa 15

自Kotlin 1.3.30(changelog)开始,Kotlin编译器支持将JVM 9、10、11和12字节码版本作为目标。

在1.3.30之前,仅支持JVM 1.6和1.8字节码版本作为目标。由于您使用的是1.2.70,因此将JVM 11字节码指定为目标会导致您提到的错误。

有两种解决方案:

  • 将1.8指定为JVM目标字节码版本。正如@yole在回答中所说的那样,它与JVM 11完全兼容。实际上,正如Kotlin 1.3.30的更新日志中所述,较新的JVM目标字节码版本当前未添加1.8所支持的字节码优化之外的任何字节码优化,因此无论如何现在真的没有任何区别。

  • 升级到Kotlin 1.3.30(或更高版本),然后可以保留11作为JVM字节码目标值。优点是您将自动从Kotlin编译器的未来版本中的其他字节码优化中受益。


Bao*_* Le 9

从 Kotlin 1.4 开始,它支持 Java (默认1.6)、1.891011121314

-jvm-target 指定生成的 JVM 字节码的目标版本。可能的值为 1.6、1.8、9、10、11、12、13 和 14。默认值为 1.6。

https://kotlinlang.org/docs/reference/compiler-reference.html#-jvm-target-version

是的,它完全支持 Java 11。