为什么 Eclipse 抱怨该项目指定编译器合规性 1.8 但使用的是 JRE 11?

Why does Eclipse complain that the project specifies compiler compliance 1.8 but a JRE 11 is used?

我将 Eclipse 项目编译器合规性设置为 1.8,因为我想生成可以在安装了 JRE 8 的计算机上执行的 jar 文件。

但是,在我的开发计算机中,我只安装了 JRE 11。我认为这没问题,因为我希望 JRE 11 能够执行 1.8 及更高版本的文件。

但是,Eclipse 对此发出警告(我找不到禁用方法),并且编译器首选项对话框显示 "When selecting 1.8 compliance, make sure to have a compatible JRE installed and activated (currently 11)",这听起来像是 JRE 11 与 1.8 不兼容。真的是这样吗?

我在这里做出的错误假设到底是什么?

此外,我真的需要安装 JRE 8 才能生成与 JRE 8 兼容的代码吗?

如果您想 100% 确定,请使用您将在生产中使用的相同 JDK 进行编译,至少使用相同的主要版本。 JRE 11 肯定可以执行 1.8 class 个文件。不过,较旧的 JVM 可能无法 运行 较新的 class 文件。即使您以旧版本为目标并生成应该兼容的 class 文件,您也可能正在针对较新的 JDK classes 进行编译,并且 API 确实发生了变化。当您尝试在较旧的 JVM 上 运行 时,这可能会破坏您的代码。

大多数时候它会起作用,但安全总比后悔好!听听这种情况下的警告,它们确实有道理。

编辑:查看 howlger 的回答,而不是 --release 选项。

你有没有安装 JDK?如果我没记错的话,警告与此有关。听起来我的 Eclipse、OpenJDK、Ubuntu 组合缺少 openjdk-11-jdk 包。

Project > Properties: Java Compiler 检查 Use ' --release' 选项 复选框以避免警告。

使用'--release'选项并将编译器合规级别设置为1.8,例如" foo ".strip()即使 Java 11 JDK 也显示为错误,因为 Java 11 中引入的 String#strip() 在 Java 8.

中丢失

另请参阅: