【问题标题】:Java SE 8: Would a Java 7 compiled JAR be compatible completely with Java 8?Java SE 8:Java 7 编译的 JAR 是否与 Java 8 完全兼容?
【发布时间】:2014-08-28 05:27:11
【问题描述】:

我在 Java 7 中编译了我的旧 JAR 文件,并且我的生产环境具有 Java 8。在将 JAR 文件直接部署到 Java 8 环境中时我需要注意什么吗?我在 Java 8 上测试运行它们,它运行良好。我会遇到任何问题还是应该没事?我想知道这一点,因为我正在讨论删除 Java 8 和安装 Java 7。

编辑:附带问题:公司在更新 Java 版本时会更新代码吗?我无法想象这是多么痛苦,所以让您的应用在以前的版本上运行,然后在新版本上完全失败。

【问题讨论】:

  • 我记得从 6 到 7 遇到了错误,尤其是在排序方面。对默认排序的更改(引入 TimSort)引入了一项检查,该检查导致有缺陷的比较算法大声失败,而不是静默失败。事实证明,我们的“错误”从未出现在我们的用例中,因为它最终会自行解决。但是 TimSort 在内部检查中检测到错误(检查不应该发生的情况)并抛出异常。唯一真正了解的方法是测试、测试、测试。

标签: java compatibility


【解决方案1】:

我想知道这一点,因为我正在讨论删除 Java 8 和安装 Java 7。

我猜你的意思是相反的?

Java 试图尽可能地保持向后兼容性,所以理论上至少你应该没问题。

但在实践中,有时确实会出现问题,因此我提倡彻底测试。这些可能是由于回归错误,或者(根据我的经验更有可能)错误代码可能在 Java 7 下运行良好,但在 8 下运行良好。(FWIW,我有几个 FX 应用程序在 8 下混合表现但在7,事实证明,两者都是由于我的代码中的错误,巧合的是,在使用 7 运行时没有异常的副作用。)

【讨论】:

  • 不,我不是这个意思。 JAR 在 7 上编译并在 7 上完美运行。一个措辞更好的问题是,我是否应该坚持使用 7,因为它工作得很好,而不是升级到 8?我在 8 上进行了测试,它也运行良好,但是,我担心在 8 上可能会出现问题。
  • @user1757703 好吧,在这种情况下,我肯定会提倡在您的开发/生产环境中保持主要的 Java 版本一致。无论您选择将它们升级到 8 还是降级到 7 都是您的决定(但我个人总是倾向于升级,除非您有充分的理由不这样做。)
  • 好的,这很有帮助。谢谢先生。
【解决方案2】:

通常应该没有问题。否则,您将很难使用任何未明确编译为 Java SE 8 的第三方库。

我建议使用 Java SE 8 在 Jenkins 等持续集成服务器上运行自动化测试,看看是否有任何问题。

【讨论】:

    【解决方案3】:

    使用 Java 7 编译的 jar 依赖项打包 Java 8 应用程序是安全的。但是,请记住 JDK 7 和 8 的差异,这可能会导致相同的 Java 代码在 JDK 8 上运行时表现不同vs JDK 7(参考 JDK 8 发行说明)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多