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

IT小君   2021-09-26T06:37:13

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

例外:

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

我认为这个问题是由于 spring 和它所依赖的“asm.jar”库而发生的。

我该如何解决?

点击广告,支持我们为你提供更好的服务
评论(5)
IT小君

正如@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

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

2021-09-26T06:37:14   回复
IT小君

如果即使使用-target 1.7编译也遇到这个错误,请注意这是由于Spring Framework中的一个bug导致ASM classreader加载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,那么很高兴知道有替代方案(很快)。

2021-09-26T06:37:14   回复
IT小君

如果您使用 java 8 或下一个版本,则需要升级 spring 版本,spring 版本应为 4.xxx

2021-09-26T06:37:14   回复
IT小君

我遇到了同样的问题并解决了它。我在 java 8 中使用 spring 3.x。如果上述解决方案不起作用,请更改 jars 并搜索这些 jars 是否与您使用的 java 版本兼容。spring 3.x 与 java 8 不兼容。

2021-09-26T06:37:15   回复
IT小君

Spring 4 可以用于 java 8 来解决这个问题。我刚刚测试了它并且它有效。此问题自 Spring 3.2.9-RELEASE 版本起已修复。

2021-09-26T06:37:15   回复