解决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 @   沙漏倒装回忆1024  阅读(5245)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示