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

时间:2012-06-05 10:50:45

标签: java

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

2 个答案:

答案 0 :(得分:80)

如前所述,您已经主要是安全且大多数产品和3个 rd 派对图书馆将会起作用。但确实存在非常罕见的情况二进制不兼容使用较旧的JDK编译的类文件无法在较新的JVM中运行的)在JDK版本之间引入。

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

兼容性工具

使用 JDK 9 打包,有一个名为jdeprscan 的工具,它将验证兼容性,列出代码中不再使用的API并建议替代方案(!)。您可以指定目标 JDK版本(适用于 JDK 9 8 7 6 < / strong>)它将列出特定于您的目标版本的不兼容性。

图书馆的附加评论:

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

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

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

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

Here is a great answer on how to find out class version。您可能需要先解压缩JAR文件。

答案 1 :(得分:76)

你不会遇到任何问题 - 这是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成为公司的一个伟大的发展选择。