【问题标题】:Old projects compatible with Java 7与 Java 7 兼容的旧项目
【发布时间】:2026-02-15 10:30:01
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    也可以看Java API Tracker项目中对API变化的独立分析:http://abi-laboratory.pro/java/tracker/timeline/jre/

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • +1。不幸的是,当前版本(更新 0)存在一些问题(例如在 Lucene/Solr 中可见:lucene.apache.org/…
      • @rebecca:这取决于 - 在语言、API 或 VM 改进方面,它是否包含您知道您想要的任何内容?在不完全了解您的项目的情况下,我很难给出具体的建议。 个人我想迁移到 Java 7 以使用新的语言功能,但我不知道您的情况或偏好。
      • @Jon,偏爱,对我来说是一个新词。我喜欢它。;)
      • @Jon:我在 J2SE 和 J2EE 项目中使用 JDK。
      • @Joachim:哎呀——我没听说过。讨厌。
      【解决方案3】:

      应该没有任何兼容性差异,因为 JVM 基本相同。然而,现在还处于早期阶段,因此可能存在细微的差异,从而导致人们尚未意识到的问题。

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

      我的意思是,如果您编写通用 Java 代码,您应该不会有问题。但是,如果您做的事情有点不寻常,您可能需要重新测试您的应用程序。

      【讨论】:

      • 是的,到目前为止,我们最大的错误是我们进行的 Java 供应商检查现在失败了(这实际上只是从前阻止 IE Java 的遗留问题)。
      【解决方案4】:

      如前所述,向后兼容性在新的 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来关闭受影响的循环优化。

      【讨论】:

      • 最新版本的 Java 6 也有这个 bug 真是一文不值。
      • @Peter:没错,但在 Java 6 中,相应的选项默认是关闭的。
      【解决方案5】:

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

      【讨论】: