解决java.lang.NoClassDefFoundError:Could not initialize class net.sf.cglib.beans.BeanMap$Generator?异常
异常描述
项目引入Alibaba的EasyExcel工具,编译没有报错,在请求导出Excel文件的接口时,log异常出现以下错误
java.lang.NoClassDefFoundError:Could not initialize class net.sf.cglib.beans.BeanMap$Generator
异常分析
java.lang.NoClassDefFoundError:无法初始化类net.sf.cglib.beans.BeanMap$Generator。
一般遇到NoClassDefFoundError类似的异常时,大多数都是因为jar包冲突引起的。
查看到日志详情信息
class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassVisitor as super class
tips:ClassVisitor 定义的是一个 interface,但是现在却作为一个父类(super class)被其它类继承了。
classVisitor在一个jar包中是一个接口,在另一个jar包中却是class
图解
从maven官方来了解
结论:
asm 包从 3.3.1 往后,gropuId 发生了变更(由asm 变更 org.ow2.asm);
由于项目使用的 springboot 版本是 2.0.0,需要依赖 asm3.0,easyexcel 2.1.6 依赖的是 asm 4.2;
导致 Maven 在打包的时候将这两个 asm包( artifactId 一样,但groupId 不一样)都打进去了。
解决方案
1.根据项目选择对应的版本:
依据:class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassVisitor as super class
根据当前项目 springboot 版本是 2.0.0,需要选择的是asm 3.1,所以asm的上级包cglib 2.2。
tips:请结合项目的springboot版本来选择。
2.在项目里面引入cglib的maven坐标:
<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2</version> </dependency>
3.更新项目的maven依赖,重新编译!
笔者: 沙漏倒装回忆1024
出处:https://www.cnblogs.com/lpan1024/
版权所有,欢迎保留原文链接进行转载!
请点赞关注留言,如果有任何建议也可以留言,因为我会回复每一条评论,感谢阅读。
版权所有,转载请注明原文链接: https://www.cnblogs.com/lpan1024/p/16703505.html
请点赞关注留言,如果有任何建议也可以留言,因为我会回复每一条评论,感谢阅读。