为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2022-09-28 14:35:08
我正在尝试使用 JDK 11 进行编译,但以 IntelliJ 中的 Java 1.8 为目标。我已配置:项目设置:项目开发工具包: 11项目语言水平: 8Java 编译器设置:使用“--发布”选项进行交叉编译(Java 9 及更高版本)项目字节码版本: 8模块设置:软件开发工具包项目 (11)语言级别:项目默认值(8 - Lambda、类型注释等)我收到一堆编译错误,说内部包不存在。 无效,因此无济于事。--add-exports--target 1.8唯一可行的方法是将项目SDK设置回Java 1.8(这在尝试使用Java 11运行时会导致其他问题,但这是另一个问题)。是否可以使用 JDK 11 进行编译,并在 IntelliJ 中以 Java 1.8 为目标?
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

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

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

对于 N < 9:-源 N -目标 N -引导类路径 <文档的 API-从-N>,

对于 N >= 9:-源 N -目标 N --系统<文档化 API-来自-N>。

然后跟随主要段落:

对于 N < 9,记录的 API 由 javac 的 JDK N 的默认引导类路径上的公共 API 组成。

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

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

您有两种方法:

  • 不要使用内部接口

  • 使用 JDK 8 进行编译


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信