设置 eclipse java 编译器合规性级别 1.6 是否与使用 JDK 1.6 进行编译相同



我正在尝试使用第三方API,在那里我获得了对JDK 1.6以下第三方API的支持。

我还有其他几个使用 JDK 1.7 构建的项目,作为产品的一部分,我也打包了 JRE 1.7。

如果编译器合规性级别设置为 JDK 1.6,则使用 JDK 1.7 库编译和运行会产生与使用 JDK 1.6 编译和运行相同的结果?

当编译器合规性级别设置为 JDK 1.6 时,从第三方供应商处声明支持是否安全。

更新:我认为在 eclipse 中设置编译器级别与设置 javac 的 -source 和 -target 选项相同。

我不确定使用 JDK 1.7 将源代码和目标设置为 6/1.6 进行编译是否与在 jdk1.6 中进行编译相同。

问题在于 Java API 在版本之间的更改。有一些类和方法在Java 7中可用,但在Java 6和其他方式中不可用。代码使用 Java 7 编译,但由于缺少类或方法,它不会在 Java 6 上运行。

除非你用Java 6 JDK编译,否则你不能100%确定。

是的,如果您在合规性级别设置为 1.6 的情况下进行编译,它将能够在 Java 6 上运行 - 编译器将保证这一点。它也应该能够在java 7上运行,因为JRE是向后兼容的。

您实际上可以在"首选项->Java->编译器"(特定于项目(中指定.class文件版本兼容性,因此在最坏的情况下,您将受益于更新的编译器构建可能与使用 JDK 1.6 完全相同的字节码。

然而,"合规性 1.6"并不能确保您获得与使用 JDK1.6 完全相同的结果,但 Java 标准确保使用 1.6 构建的应用程序将在>= 1.6 JRE 上运行相同的结果。

因此,如果您真的害怕不兼容,请在一台同时使用 JRE 1.6 和其他项目的 1.7 的机器上使用项目特定的设置 1.6 构建项目(我想在您的 CI 服务器上(,并将 1.7 捆绑在您的发行版中,它保证在 Sun/oracle/java 上运行正常。

也就是说,如果代码是用JDK 1.6构建的,并且被其他JDK>= 1.7代码使用,那么在版本控制方面就可以了。可能这就是你每天使用的许多罐子的情况。

但是,如果您害怕现实世界的问题(涉及金钱(,那么使用真正的JDK 1.6构建带有1.6标记的代码是唯一明智的做法。

所以我认为你可以安全地"请求支持",在 1.6 中构建并在 1.7 中使用罐子。

根据我对 Eclipse 的经验,设置为 Java 5 的合规性级别与使用 JDK5 编译不同。 当已安装的 Java 设置为 Java 6 并且合规性设置为 5 时,它允许 Java 6 方法在本地传递编译,然后在签入文件时我们的构建失败。

最新更新