这可能是一个愚蠢的问题,但我会在运行 Java 程序和在 Java 版本 1.6和1.7 中编译的相关库(我使用 1.7 编译,而某些库使用 1.6 编译)并在 1.7 JRE 中运行整个程序时遇到任何问题?
2 回答
正如已经回答的那样,您基本上是安全的,大多数产品和 3 rd方库都可以正常工作。但是,确实存在非常罕见的情况,即在 JDK 版本之间引入了二进制不兼容(使用旧 JDK 编译的类文件将无法在新 JVM 中运行的情况)。
Oracle Java 版本间不兼容的官方列表:
- 自 Java SE 8 起在 Java SE 9 中
- 自 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 中
兼容性工具
与JDK 9一起打包,有一个名为jdeprscan的工具,它将验证兼容性,列出代码中不再使用的 API 并建议替代方案(!)。您可以指定目标JDK 版本(适用于JDK 9、8、7和6),它将列出特定于您的目标版本的不兼容性。
图书馆的附加评论:
一个合理的经验法则是为您的软件目标的 JRE 版本使用最新的稳定版本库。显然你会发现这条规则有很多例外,但一般来说,公共可用库的稳定性通常会随着时间的推移而增加。
在更改依赖项的版本时,自然必须考虑API 兼容性和版本控制。
同样,最流行的依赖项将具有应该提供此类信息的网页。
但是,如果您使用的东西有点模糊,您可以辨别出哪些 JRE 是您的依赖项中编译的类。
这是关于如何找出类版本的一个很好的答案。您可能需要先解压缩 JAR 文件。
你不会遇到任何问题——这就是 Java 的魔力——它向后兼容。你可以在 Java 8 上运行几乎所有来自 Java 1 的代码。Java 6 代码没有理由不能在 Java 8 运行时上运行。
有趣的是,对于使用 Java 1.4 编写的应用程序,在以后的运行时运行它们甚至可以提高速度。这是因为Java在不断发展,不仅仅是被称为“Java”的语言,还有JVM(Java虚拟机)。我仍然有 10 多年前的源代码,它们仍然可以正常工作,正如在最新的 JVM 中所预期的那样。
如果您想以 Java 5 VM 为目标,那么您可以使用 Java 8 SDK 工具来实现。您最终可以指定您希望支持的目标 VM,只要您记住版本 5 VM 可能不支持版本 8 VM 将支持的所有功能。
我刚刚针对新的 Java 8 运行时测试了我在 Java 5 中编写的代码,一切都按预期工作,因此,即使我们现在拥有更强大的语言和运行时,我们也可以继续使用我们过去的投资。仅此一项就使 Java 成为公司的绝佳开发选择。