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 使用