首页 > 解决方案 > 如何在 IntelliJ 中使用 Java 11 编译目标 Java 1.8

问题描述

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

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

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

是否可以在 IntelliJ 中使用 JDK 11 进行编译并以 Java 1.8 为目标?

还有其他相关问题似乎有效,但不是来自 IntelliJ:

标签: javaintellij-ideajava-8java-11

解决方案


--release N不幸的是,如果您使用该选项进行编译,则无法使用内部 API 。这在JEP 247中有描述:

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

对于 N < 9:-source N -target N -bootclasspath <documented-APIs-from-N>,

对于 N >= 9:-source N -target N --system <documented-APIs-from-N>。

然后是主要段落:

对于 N < 9,记录的 API 包含位于 javac JDK N 的默认引导类路径上的公共 API 。

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

因此,您的问题与 IntelliJ IDEA 无关。这是Java平台的限制。

你有两种方法:

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

推荐阅读