首页 > 解决方案 > 带有 JDK 10 的 Kotlin

问题描述

最近我将我的 JDK 更新到 JDK 10,现在我遇到了 Kotlin 的配置问题,我无法运行我的代码。这是因为 JDK 10 还是因为其他原因?

我在创建 Kotlin 项目时从 InteliJ 得到的提示:

Configure Kotlin
        Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk7.jar to library configuration
        Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk7-sources.jar to library configuration
        Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk8.jar to library configuration
        Added /Applications/IntelliJ IDEA CE.app/Contents/plugins/Kotlin/kotlinc/lib/kotlin-stdlib-jdk8-sources.jar to library configuration

标签: javaintellij-ideakotlinjava-10

解决方案


在撰写本文时(2018 年 9 月),Kotlin 的编译器默认不支持生成 Java 9+ 字节码。

参数-jvm-target 9参见 KT-21959)应该使 Kotlin 编译器生成版本 53 的字节码。

由于 Java 10 是bytecode version 54参考) - 我不确定这将如何工作。

仍然:

  • 您可以编译成 JVM 8 字节码,可以在 JVM 9+ 上正常执行。

  • 如果您想定义模块(或使用需要整个程序模块化的 jlink),您现在可以用 Java 编写文件module-info.java,并将文件放在与 Kotlin 文件相同的源根目录中。

    • Kotlin 编译器将正确限制依赖模块中非导出包中声明的可访问性。
    • 目前,没有计划在 Kotlin 中支持模块定义。

除此之外,大多数 Java 9-11 语言特性(var、REPL、流改进等) - 在 Kotlin 中已经存在了一段时间,因此使用 Java 9-11 的主要直接好处是使用 JVM 进行优化,或模块系统/ jlink(您可以按照上面的描述使用)


推荐阅读