如何在 IntelliJ 中使用 Java 11 以 Java 1.8 为目标进行编译



我正在尝试使用 JDK 11 进行编译,但在 IntelliJ 中以 Java 1.8 为目标。我已经配置了:

  • 项目设置:
    • 项目SDK:11
    • 项目语言水平:8
  • Java 编译器设置:
    • 使用"--release"选项进行交叉编译(Java 9 及更高版本)
    • 项目字节码版本:8
  • 模块设置:
    • 项目软件开发工具包 (11)
    • 语言级别:项目默认值(8 - Lambda、类型注释等)

我收到一堆编译错误,说内部包不存在。--add-exports--target 1.8无效,因此无济于事。

唯一有效的方法是将项目 SDK 设置回 Java 1.8(这在尝试使用 Java 11 运行时会导致其他问题,但这是另一个问题)。

是否可以使用 JDK 11 进行编译并在 IntelliJ 中面向 Java 1.8?

还有其他相关问题似乎有效,但不适用于IntelliJ:

  • 如何在 Java 11 中生成代码,但针对 Java 8 及更高版本?
  • 迁移到 OpenJDK-11,但用 Java 8 编译

不幸的是,如果使用--release N选项进行编译,则无法使用内部 API。JEP 247 中对此进行了描述:

定义了一个新的命令行选项 --release,它会自动 配置编译器以生成将链接到的类文件 给定平台版本的实现。--释放 N 是 大致相当于:

对于 N <9: -source N -target N -bootclasspath

对于 N>= 9:-source N -target N --system

然后是主要段落:

对于 N <9,记录的 API 由位于javac 为 JDK N 提供的默认引导类路径。

我同意这实际上是一个很大的限制。你甚至不能使用sun.misc.Unsafe,它一直是OpenJDK的关键部分。

所以,你的问题与IntelliJ IDEA无关。这是Java平台的限制。

您有两种方法:

  • 不要使用内部 API
  • 使用 JDK 8 进行编译

相关内容

  • 没有找到相关文章

最新更新