Java是向后兼容的,但是当我们将jdk从1.6升级到1.8时,为什么我们需要升级许多库?

时间:2015-01-30 02:51:03

标签: java migration java-8 java-7

最近,我们在一个Java项目中将Jdk版本从1.6升级到1.8。但是有一些编译或运行时错误,所以我必须升级一些库:

  • gradle:1.91.10
  • spring:3.x4.x

那是因为他们使用的是早期版本的ASM,但仅支持来自5.x

的jdk 1.8

Java表示它是向后兼容的,但为什么原始版本的库无法直接与jdk 1.8一起使用?

2 个答案:

答案 0 :(得分:12)

ASM是一个非常低级的库。

它直接处理Java字节码(而“普通”应用程序只是让JVM加载它的类)。字节码格式会不时更改,旧版JVM不能使用较新版本。

向后兼容性不包括与JDK或类格式内部的混淆。

这实际上是一个边缘案例,ASM几乎是唯一的“流行”示例。


更重要的是(也更常见)系统库代码中的轻微行为更改。因此,您的应用程序在技术上仍会运行,但以不同的方式执行。大多数情况下,您需要这样做,因为它意味着改进(例如更好的性能),但有时它可能会导致您的错误。

例如:


但是所有遗留的应用程序兼容性故事都非常适合Java。他们必须牢记所有企业客户的想法。

答案 1 :(得分:11)

因为ASM是一个对Java字节码进行操作的工具。并且字节码格式改变以引入新功能。因此,您必须升级该工具以支持新的字节码。

请注意,使用较早版本的JDK编译的软件始终不能与较新版本的Java一起使用。例如,enum在早期版本的JDK中不是关键字。