1

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

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

但是,Eclipse 会对此产生警告(我找不到禁用的方法),并且编译器首选项对话框显示“选择 1.8 合规性时,请确保安装并激活兼容的 JRE(当前为 11)”,这使得听起来像 JRE 11 与 1.8 不兼容。真的是这样吗?

我在这里做了什么错误的假设,究竟是什么?

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

4

3 回答 3

4

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

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

在此处输入图像描述

也可以看看:

于 2019-03-16T16:48:07.640 回答
1

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

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

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

于 2019-03-16T07:39:12.377 回答
0

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

于 2019-03-16T11:36:53.467 回答