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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 1.8 ASM ClassReader无法解析类文件 - 可能是由于尚未支持的新Java类文件版本相关的知识,希望对你有一定的参考价值。

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

我该如何解决这个问题?

答案

正如@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,-source 1.8所需)。特别是,基于Spring 3.2的应用程序需要使用最多Java 7作为目标进行编译,即使它们恰好部署在Java 8运行时也是如此。请升级到Spring 4以获取基于Java 8的应用程序。

另一答案

如果你使用-target 1.7编译时遇到这个错误,请注意这是因为Spring Framework中的一个错误导致ASM类重写器加载jdk类(java。*或javax。*),当然,用-target 1.8编译。

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

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

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

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

但是,如果由于某种原因你还无法升级到版本4,那么很高兴知道有一种替代方案(很快)。

另一答案

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

另一答案

我有同样的问题并解决了它。我正在使用带有java 8的spring 3.x。如果以上解决方案无效,请更改jar并搜索这些jar是否与您正在使用的java版本兼容。 spring 3.x与java 8不兼容。

另一答案

Spring 4可以用于java 8来解决这个问题。我只是测试它,它的工作原理。自3.2.9-RELEASE以来,此问题已得到解决。

以上是关于Java 1.8 ASM ClassReader无法解析类文件 - 可能是由于尚未支持的新Java类文件版本的主要内容,如果未能解决你的问题,请参考以下文章

ASM字节码操作 转换已有的类 ClassReader 修改字段信息 删除字段 增加字段

ASM字节码操作 转换已有的类 ClassReader 实战案例 修改版本 修改接口

ASM字节码操作 转换已有的类 ClassReader 使用

ASM字节码操作 转换已有的类 ClassReader 介绍

常见异常解决

ASM字节码操作 转换已有的类 ClassReader 删除方法 添加方法