Java 1.8 ASM ClassReader无法parsing类文件 – 可能是由于尚未支持新的Java类文件版本

我的Web应用程序在JDK 1.7上运行良好,但是在1.8版本中崩溃,但出现以下exception(在使用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”库引起的。

我如何解决这个问题?

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

查看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所需的-target 1.8)才得到完全支持。 尤其是,基于Spring 3.2的应用程序需要以最大的Java 7作为目标进行编译,即使它们恰好被部署到Java 8运行时。 请升级到基于Java 8的应用程序的Spring 4。

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

这与3.2.8及以后版本的旧ASM版本相结合,不支持1.8类文件的parsing,也可能导致这个错误。

关于这个问题的更多信息可以在这里find: https : //jira.spring.io/browse/SPR-11719

这应该在Spring Framework 3.2.9版中得到修复,这个版本很快就会发布。

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

但是,如果由于某种原因,你不能升级到版本4,很高兴知道有一个替代(很快)。

如果你使用java 8或者下一个版本,你需要升级spring版本,spring版本应该是4.xxx

为了解决这个问题,Spring 4必须被用于java 8。 我只是testing它,它的工作原理。