【问题标题】:Kotlin with JDK 10带有 JDK 10 的 Kotlin
【发布时间】:2018-09-29 17:41:08
【问题描述】:

最近我将我的 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

【问题讨论】:

  • 可能是 jdk9+ 模块问题。您遇到什么配置问题?您发布的内容看起来不是问题,只是信息

标签: java intellij-idea kotlin java-10


【解决方案1】:

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

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

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

仍然:

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

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

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

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

【讨论】:

  • 我想补充一下,目前存在一个未解决的问题,让 Kotlin 编译器生成仅版本号等于已建立目标的 .class 文件。这并不意味着它将使用针对该特定版本的优化字节码。
  • @LppEdd - 你能加个链接吗?
【解决方案2】:

version 1.3.30开始,Kotlin 现在支持 JVM 字节码目标 9、10、11、12。(KT-26240 - LppEdd 提到的票证 - 已包含在内。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多