解决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/

版权所有,欢迎保留原文链接进行转载!

请点赞关注留言,如果有任何建议也可以留言,因为我会回复每一条评论,感谢阅读。

posted @ 2022-09-17 21:02  沙漏倒装回忆1024  阅读(5128)  评论(0编辑  收藏  举报