较新的JRE版本可以运行使用旧版JDK编译的Java程序吗?

sha*_*awn 71 java

这可能是一个愚蠢的问题,但是我会遇到运行Java程序和Java版本1.6 1.7中编译的相关库的任何问题(我使用1.7进行编译,而有些库使用1.6编译)并在1.7 JRE中运行整个程序?

dig*_*ise 89

前面已经回答了你的大部分安全和产品和3 党库将简单工作.但是,确实存在非常罕见的情况,其中在JDK版本之间引入了二进制不兼容性(使用较旧的JDK编译的类文件将无法在较新的JVM中运行的那些).

版本之间Oracle Java不兼容的正式列表:

兼容工具

使用JDK 9打包,有一个名为jdeprscan的工具可以验证兼容性,列出代码中不再使用的API并建议备选方案(!).您可以指定目标JDK版本(适用于JDK 9,8,76),它会列出具体到你的目标版本不兼容.

图书馆的附加评论:

一个合理的经验法则是为您的软件目标的JRE版本使用最新的稳定版本库.显然,您会发现此规则有许多例外情况,但总的来说,公共图书馆的稳定性通常会随着时间的推移而增加.

当然,在更改依赖项的版本时,必须考虑API兼容性版本控制.

同样,大多数流行的依赖项都会有可以提供此类信息的网页.

但是,如果你使用的东西有点模糊,你可以看出哪个JRE是你编译的依赖项中的类.

这是一个很好的答案,如何找出类版本.您可能需要先解压缩JAR文件.

  • 实际上这应该是正确的答案,因为升级到较新的java版本并不完全安全. (12认同)

Ewa*_*ald 78

你不会遇到任何问题 - 这是Java的魔力 - 它向后兼容.你可以在Java 8上运行几乎所有来自Java 1的代码.没有理由说Java 6代码不能在Java 8 Runtime上运行.

有趣的是,对于写入的应用程序,比如Java 1.4,在以后的运行时运行它们时甚至可以提高速度.这是因为Java不断发展,不仅仅是称为"Java"的语言,还有JVM(Java虚拟机).我仍然拥有10多年前的源代码仍然有效,正如最新的JVM所预期的那样.

如果您想要定位Java 5 VM,那么您可以使用Java 8 SDK工具进行定位.您可以最终指定您希望支持的目标VM,只要您记住版本5 VM可能不支持版本8 VM的所有功能.

我刚刚测试了我在Java 5中编写的针对新Java 8运行时的代码,一切都按预期工作,因此,即使我们现在拥有更强大的语言和运行时,我们仍可以继续使用过去的投资.只是这一点使Java成为公司的一个伟大的发展选择.

  • 大约 8 年后,遗憾的是,这不再是事实。我在使用 Java14 和旧版 Java 应用程序时遇到很多问题,这些应用程序依赖于现已从 Java 运行时中删除的功能。对于标准代码,是的,它仍然有效,但是有一些企业库您不能再依赖它们了。JavaFX 也是如此。遗憾的是,这迫使我们在工作中考虑从 Java 转向 Rust。 (6认同)
  • 你有没有看到"你可以在Java 8上运行几乎所有Java 1代码"?存在一些小的不兼容性,主要是在JVM的深奥部分.总的来说,Java仍然是非常向后兼容的. (3认同)
  • 如果在Java 7运行时运行它,是的.它没有理由不工作. (2认同)