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

问题描述 投票:2回答:1

我正在尝试使用JDK 11编译,但是在IntelliJ中使用Java 1.8。我配置了:

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

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

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

是否可以使用JDK 11编译并在IntelliJ中定位Java 1.8?

还有其他相关问题似乎有效,但IntelliJ没有:

java intellij-idea java-8 java-11
1个回答
4
投票

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

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

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

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

然后是主段落:

对于N <9,记录的API由javac的JDK N的默认bootclasspath上的公共API组成。

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

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

你有两种方式:

  • 不要使用内部API
  • 使用JDK 8进行编译
© www.soinside.com 2019 - 2024. All rights reserved.