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


87

我的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”库而发生的。

我该如何解决?


您要将Web应用程序编译为Java 8还是Java 7?如果8,应该可以编译你的类目标的Java 7,但仍然Java的下运行8
prunge

3
如果您想使用Java8,则需要Spring 4
Pablo Lozano

它编译为1.7,但不支持Java 8功能。因此,在这种情况下使用jdk 8不会产生任何意义
stanislav.chetvertkov 2014年

Answers:


119

正如@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 8运行时上,也需要使用最多的Java 7进行编译。请针对基于Java 8的应用程序升级到Spring 4。


工作正常,谢谢!由于某种原因,我错过了春季4发布:-)
stanislav.chetvertkov

2
即使代码仍按目标1.7编译,这也发生在我身上,我只将运行时更改为Java8。有什么想法吗?
orrsella 2014年

1
参见ItayK的答案,在3.2.8春季及以下版本中存在一个错误,该错误不会使用正确的asm版本,已在3.2.9-中修复。–
chrismarx

2
3.2.10中修复了另一个错误,因此我建议使用3.2.16或最新版本。以下是一些已修复的关键Spring错误:元数据读取绝对不能对Java。*和javax。*类型使用ASM(特别是在JDK 8上) Java 8:在接口上解析INVOKESPECIAL / STATIC所需的ASM5访问者
michaelok

谢谢,它通过保留<groupId> org.apache.maven.plugins </ groupId> <artifactId> maven-compiler-plugin </ artifactId>起作用,<configuration> <source> 1.7 </ source> <target> 1.7 </ target> </ configuration>而不是<groupId> org.apache.maven.plugins </ groupId> <artifactId> maven-compiler-plugin </ artifactId> <configuration> <source> 1.8 </ source> <target> 1.8 < / target> </ configuration>
Ashutosh S

67

如果即使使用-target 1.7进行编译也遇到此错误,请注意这是由于Spring Framework中的错误导致ASM classreader加载jdk类(java。*或javax。*),当然,用-target 1.8编译。

将此问题与不支持解析1.8类文件的春季3.2.8及更低版本中的旧ASM版本结合使用,也可能导致此错误。

有关此问题的更多信息,请参见:https//jira.spring.io/browse/SPR-11719

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

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

但是,如果由于某种原因您还不能升级到版本4,那么很高兴知道还有其他选择(很快)。


6
升级到Spring 3.2.9可以帮助我。
Cengiz 2015年

2
这应该是一个可以接受的答案,因为它清楚地说明了问题所在
Willa,2016年

2
Spring 3.2.5遇到了此问题,更改为3.2.9,并解决了问题。完美的答案。
Salvatorelab

ew,很高兴我不需要升级到Spring 4。
rudolfson

0

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


0

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


0

Spring 4可用于Java 8以解决此问题。我刚刚对其进行了测试,并且可以正常工作。从Spring 3.2.9-RELEASE版本开始,此问题已修复。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.