较新的JRE版本可以运行使用较旧的JDK版本编译的Java程序吗?
这可能是一个愚蠢的问题,但我会遇到运行Java程序和相关的库在Java版本1.6 和 1.7编译(我正在编译使用1.7,而一些库编译使用1.6),并运行整个程序在1.7 JRE ?
一点也不 – 这就是Java的魔力 – 它向后兼容。您可以在Java 8上运行Java 1中的几乎所有代码。没有理由说Java 6代码不能在Java 8运行时运行。
有趣的是,对于编写的应用程序,比如说Java 1.4,在以后的运行时间里运行它们甚至会提高速度。 这是因为Java不断发展,不仅仅是称为“Java”的语言,而且还是JVM(Java虚拟机)。 我仍然拥有十多年前的源代码,如最新的JVM所预期的那样仍然有效。
如果您想要定位一个Java 5 VM,那么您可以使用Java 8 SDK工具来实现这一目标。 您可以最终指定您希望支持的目标虚拟机,只要您记住第5版虚拟机可能不支持第8版虚拟机的所有function。
我刚刚testing了用Java 5编写的代码与新的Java 8运行时相关的代码,并且所有代码都按预期工作,所以即使我们现在拥有更强大的语言和运行时,我们仍然可以继续使用过去的投资。 仅仅这样,Java就成为公司很好的开发select。
正如已经回答,你大多是安全的, 大多数产品和第三方图书馆将只是工作。 但是,在确实存在二进制不兼容的情况下,确实存在非常罕见的情况。
版本之间Oracle Java不兼容的官方列表:
- 自Java SE 7起在Java SE 8中
- 自Java SE 6起在Java SE 7中
- 自Java SE 5.0起在Java SE 6中
- 自Java SE 1.4.2起在Java SE 5.0中
对图书馆的补充评论:
一个合理的经验法则是为您的软件目标的JRE版本使用库的最新稳定版本。 显然你会发现这个规则有很多例外,但总的来说,公共库的稳定性通常会随着时间的推移而增加。
当改变版本的依赖关系时,必须考虑到API自然的兼容性和版本控制 。
再次,最stream行的依赖关系将有网页,这些信息应该是可用的。
但是如果你使用的东西比较模糊,那么你可以看出哪些JRE是编译的依赖关系中的类。
关于如何找出课程版本,这是一个很好的答案 。 您可能需要先解压缩JAR文件。