最近,我们在一个Java项目中将Jdk版本从1.6
升级到1.8
。但是有一些编译或运行时错误,所以我必须升级一些库:
1.9
至1.10
3.x
至4.x
那是因为他们使用的是早期版本的ASM,但仅支持来自5.x
Java表示它是向后兼容的,但为什么原始版本的库无法直接与jdk 1.8一起使用?
答案 0 :(得分:12)
ASM是一个非常低级的库。
它直接处理Java字节码(而“普通”应用程序只是让JVM加载它的类)。字节码格式会不时更改,旧版JVM不能使用较新版本。
向后兼容性不包括与JDK或类格式内部的混淆。
这实际上是一个边缘案例,ASM几乎是唯一的“流行”示例。
更重要的是(也更常见)系统库代码中的轻微行为更改。因此,您的应用程序在技术上仍会运行,但以不同的方式执行。大多数情况下,您需要这样做,因为它意味着改进(例如更好的性能),但有时它可能会导致您的错误。
例如:
但是所有遗留的应用程序兼容性故事都非常适合Java。他们必须牢记所有企业客户的想法。
答案 1 :(得分:11)
因为ASM是一个对Java字节码进行操作的工具。并且字节码格式改变以引入新功能。因此,您必须升级该工具以支持新的字节码。
请注意,使用较早版本的JDK编译的软件始终不能与较新版本的Java一起使用。例如,enum
在早期版本的JDK中不是关键字。