繁体   English   中英

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

[英]How to compile with Java 11 target Java 1.8 in IntelliJ

我正在尝试使用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:

遗憾的是,如果使用--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进行编译

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM