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

时间:2019-04-10 00:21:17

标签: java intellij-idea java-8 java-11

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

  • 项目设置:
    • 项目SDK:11
    • 项目语言级别:8
  • Java编译器设置:
    • 使用'--release'选项进行交叉编译(Java 9和更高版本)
    • 项目字节码版本:8
  • 模块设置:
    • Project SDK(11)
    • 语言级别:项目默认设置(8-Lambda,类型注释等)

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

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

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

还有其他一些相关的问题似乎可以解决,但不适用于IntelliJ:

1 个答案:

答案 0 :(得分:3)

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

  

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

     

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

     

对于N> = 9:-源N-目标N-系统

然后跟随主要段落:

  

对于N <9,已记录的API包含已启用的公共API   JDK N的javac的默认启动类路径。

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

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

您有两种方法:

  • 请勿使用内部API
  • 使用JDK 8进行编译