【问题标题】:Does Kotlin support Java 11?Kotlin 是否支持 Java 11?
【发布时间】:2019-03-24 02:35:47
【问题描述】:

我正在尝试使用 Kotlin V1.2.70、Gradle V4.10.1 和 Java 11。使用 gradle 编译项目时,出现错误消息“Unknown JVM Target Version: 11. Supported versions: 1.6, 1.8”。

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

【问题讨论】:

  • 您将 kotlin 生成的字节码版本与 jvm 版本混淆了,您可以生成任何内容并在 jvm 11 上运行它。这就是为什么 90% 的 java 开发人员使用 java 8 但在 jvm 11 上运行它的原因。 ..

标签: gradle kotlin jvm


【解决方案1】:

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

【讨论】:

  • 这是否意味着,我必须使用 JVM8 执行 gradle 任务“compileKotlin”?
  • 没有。用于运行 Kotlin 编译器的 JVM 版本与编译器生成的字节码版本无关。
  • 但是当我将 JVM 设置为 11 用于 gradle 任务 compileKotlin 任务时,我收到错误“Unknown JVM Target Version: 11. Supported versions: 1.6, 1.8”
  • build.gradle 中的 JVM 目标版本指定 Kotlin 编译器生成的字节码的版本。它与您用于执行 Gradle 任务的 JVM 版本无关。再说一遍:设置 jvmTarget 为 1.8,其他的不用担心,一切都会好起来的。
  • @Suresh 会在某个时候添加,但我无法给出具体的时间范围。
【解决方案2】:

自 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 完全兼容。事实上,正如 changelog of Kotlin 1.3.30 中所提到的,较新的 JVM 目标字节码版本目前没有添加任何超出 1.8 支持的字节码优化,所以它真的反正现在没有任何区别。

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

【讨论】:

    【解决方案3】:

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

    -jvm-目标 指定生成的 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。

    【讨论】:

      猜你喜欢
      • 2019-04-27
      • 1970-01-01
      • 2021-12-27
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多