Java 1.8 ASM ClassReader 无法解析类文件 - 可能是由于尚不支持的新 Java 类文件版本

2022-08-31 10:32:32

我的 Web 应用程序在 JDK 1.7 上运行良好,但在 1.8 上崩溃,但出现以下异常(在使用 Jetty 8 启动应用程序服务器期间)。我使用的是春季版:3.2.5.发布。

例外:

org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet

我假设问题发生是因为它所依赖的弹簧和“asm.jar”库。

如何解决此问题?


答案 1

正如@prunge和@Pablo Lozano所说,如果你想将代码编译到Java 8(--target 1.8),你需要Spring 4,但是如果你在Spring 3.2.X上运行,你仍然可以在编译为Java 7的Java 8上运行应用程序。

退房 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.html

请注意,Java 8 字节码级别(-target 1.8,如 -source 1.8 所要求的)仅在 Spring Framework 4.0 中完全受支持。特别是,基于Spring 3.2的应用程序需要以最多Java 7为目标进行编译,即使它们碰巧部署在Java 8运行时上。对于基于 Java 8 的应用程序,请升级到 Spring 4。


答案 2

如果您使用 -target 1.7 进行编译,也会遇到此错误,请注意,这是因为 Spring Framework 中存在一个错误,该错误导致 ASM 类读取器加载 jdk 类(java.* 或 javax.*),当然,这些类是使用 -target 1.8 编译的。

这与spring 3.2.8及更低版本中不支持解析1.8类文件的旧ASM版本相结合,也可能导致此错误。

可以在此处找到有关该问题的更多信息:https://jira.spring.io/browse/SPR-11719

这应该在Spring Framework版本3.2.9中修复,该版本即将发布。

当然,升级到Spring Framework 4也将解决这个问题,因为它已经包含了较新版本的ASM。

但是,如果由于某种原因您无法升级到版本4,那么很高兴知道有另一种选择(很快)。


推荐