猿问

如何在智能JelJ中使用Java 11目标Java 1.8进行编译

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

  • 项目设置:

    • 项目开发工具包: 11

    • 项目语言水平: 8

  • Java 编译器设置:

    • 使用“--发布”选项进行交叉编译(Java 9 及更高版本)

    • 项目字节码版本: 8

  • 模块设置:

    • 软件开发工具包项目 (11)

    • 语言级别:项目默认值(8 - Lambda、类型注释等)

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

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

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


收到一只叮咚
浏览 112回答 1
1回答

白衣染霜花

遗憾的是,如果使用该选项进行编译,则无法使用内部 API。这在 JEP 247&nbsp;中进行了描述:--release N定义了一个新的命令行选项 --release,该选项自动将编译器配置为生成将链接到给定平台版本的实现的类文件。--版本 N 大致相当于:对于 N < 9:-源 N -目标 N -引导类路径 <文档的 API-从-N>,对于 N >= 9:-源 N -目标 N --系统<文档化 API-来自-N>。然后跟随主要段落:对于 N < 9,记录的 API 由 javac 的 JDK N 的默认引导类路径上的公共&nbsp;API 组成。我同意这实际上是一个很大的限制。你甚至不能使用不安全,这一直是OpenJDK的关键部分。所以,你的问题与智能IDEA无关。这是 Java 平台的一个限制。您有两种方法:不要使用内部接口使用 JDK 8 进行编译
随时随地看视频慕课网APP

相关分类

Java
我要回答