旧项目与Java 7兼容

时间:2011-07-29 08:50:29

标签: java backwards-compatibility java-7 java-6

我的旧项目使用Java 6(1.6),我不知道何时更新(Java 7),它们可以正常运行?

5 个答案:

答案 0 :(得分:12)

来自Oracle的java 6和java 7之间存在official list已知的不兼容性(包括公共API中二进制和源级别不兼容性的描述)。

您还可以查看Java API跟踪器项目中API更改的独立分析:http://abi-laboratory.pro/java/tracker/timeline/jre/

该报告由 japi-compliance-checker 工具生成。

enter image description here

答案 1 :(得分:3)

他们应该做,是的。 Java具有相当强大的向后兼容性历史。但是,如果它们以任何方式重要项目,那么在部署任何类似生产的项目之前,您仍应执行全面的测试通过。

答案 2 :(得分:1)

由于JVM基本相同,因此不应存在任何兼容性差异。然而,它是早期的,所以可能会有微妙的差异导致人们尚未意识到的问题。

e.g。 Eclipse在Windows上的java.exe中查看供应商,并为不同的供应商设置不同的命令行参数。 Java 6更新22存在问题,因为Oracle希望将其从“Sun”更改为“Oracle”。我相信这已经改变,所以它在Java 7中是“Oracle”(但对于Java 6仍然是“Sun”)

我的观点是,如果您编写通用Java代码,那么您应该没有问题。但是,如果您正在做一些不寻常的事情,则可能需要重新测试您的应用程序。

答案 3 :(得分:1)

如前所述,向后兼容性是新Java版本中非常重要的一个方面,因此通常在切换到较新的Java版本时应该没有问题。但是,在这种情况下,Java 7似乎在新的热点编译器优化中有一些错误。 Apache软件基金会发出警告称,他们的产品Lucene和Solr受到这些漏洞的影响。

http://lucene.apache.org/#28+July+2011+-+WARNING%3A+Index+corruption+and+crashes+in+Apache+Lucene+Core+%2F+Apache+Solr+with+Java+7

可以通过使用-XX:-UseLoopPredicate启动java来关闭受影响的循环优化。

答案 4 :(得分:0)

AFAIS here,没有Java 6的功能在Java 7中被弃用,所以是的,你的项目运行正常。