设置eclipse java编译器合规性级别1.6与使用JDK 1.6编译相同吗?

时间:2014-12-09 16:24:57

标签: java eclipse javac

我正在尝试使用第三方API,我支持第三方API直到JDK 1.6。

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

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

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

更新: 我假设在eclipse中设置编译器级别与设置-source& - javac的目标选项。

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

4 个答案:

答案 0 :(得分:4)

问题在于版本之间Java API的更改。 Java 7中提供了一些类和方法,但Java 6中没有这些类和方法。代码使用Java 7进行编译,但由于缺少类或方法,因此无法与Java 6一起运行。

除非您使用Java 6 JDK进行编译,否则您无法100%确定。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

但是,“Compliance 1.6”并不能确保您获得与使用JDK1.6完全相同的结果,但是java标准确保使用1.6构建的应用程序将在> = 1.6 JRE上运行相同。

因此,如果您真的害怕不兼容,请在一台机器上构建项目(在我认为的CI服务器上),在这台机器上同时使用JRE 1.6,为其他项目安装1.7,并捆绑1.7在您的发行版中,它保证可以通过Sun / oracle / java运行。

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

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

所以我认为你可以安全地“声称支持”,建立1.6并在1.7中使用jar。

答案 3 :(得分:0)

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