idea环境:Could not initialize class net.sf.cglib.beans.BeanMap

标题idea使用easyexcel,调用时报错:“Could not initialize class net.sf.cglib.beans.BeanMap$Generator“

一、使用环境如下:
1.使用第三方jar包:easyexcel;
2.使用编译器:Idea;
3.本地环境以及部署环境都存在问题。

二、判断原因:可能是jar包冲突导致的(前提:确认对应的jar包存在);

部署环境中可能存在冲突的jar包:
1.具体需要分析是什么jar包冲突 在部署环境(我的是linux)的对应目录下的lib包进行查找,查找命令:
ls -l | grep asm (已知:cglib 和 asm 版本冲突)
在这里插入图片描述
2.相关jar包依赖关系:
Easyexcel » 2.1.6依赖 cglib» 3.1,cglib» 3.1又依赖 asm» 4.2(为:org.ow2.asm » asm);
项目的springboot版本是2.0.8.RELEASE,底层会依赖 asm» 3.1 (为:asm»asm)。

3.在maven仓库(https://mvnrepository.com)搜索相关包:
(1)输入"asm",如下图:在这里插入图片描述
(2)点进去第2个asm查看,可以看出来,已经被搬到 org.ow2.asm » asm;
在这里插入图片描述
由此看来,asm(为:asm»asm)从3.3.1version后,更新的版本就变更到org.ow2.asm » asm,所以gropuId 发生了改变,致使maven在打包时,由于gropuId 不一致,将asm包2个版本的都打进去了。
(artifactId一样,但是groupId不一致就会被认为是2个jar包)
ASM Core » 3.3.1v pom.xml对应引入代码:

<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3.1</version>
</dependency>

ASM » 4.0v pom.xml对应引入代码:

<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>4.0</version>
</dependency>

三、如何解决该类问题(在idea编译器的情况下)?
(1)解决方案1:由于Easyexcel » 2.1.6 间接依赖 asm» 4.2(为:org.ow2.asm » asm),降低版本,使用cglib 2.2 可解决此问题,记得后执行【即执行clean和install】。
注:其他冲突情况(cglib版本为3.0或3.1,org.objectweb.asm版本为3.1.0时),;


版权声明:本文为sinat_35500726原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。