有时候出现这种怪异的问题,是由于多个版本的class存在。
比如说:某个java编译成class后,放到classes下面,然后lib目录下,也有这个class所在的jar包,这样就导致classpath实际上有两个相同的class
说明编译时和运行时采用了不一样的jar .
再通过maven依赖树,查询到org.slf4j.slf4j-api-1.5.6.jar是被一个单点登录的jar依赖间接引入的,于是在父工程里面排除掉
org.slf4j.slf4j-api-1.5.6.jar间接依赖(顺便也排除掉了org.slf4j.slf4j-log4j12-1.5.6.jar这个适配器包) ,问题得到解决。
事后,我们再回顾出现的错误信息 ,java.lang.NoSuchMethodError ,其实这个类的继承体系结构
java.lang.Object
java.lang.Throwable
java.lang.Error
java.lang.LinkageError
java.lang.IncompatibleClassChangeError
java.lang.NoSuchMethodError
解决办法:
出现<init>(Z)V将
将cglib.jar 由2.1版本 改为 2.2
出现<init>(I)V将
将cglib.jar 由2.2版本 改为 2.1.
原因是因为cglib 包和asm包冲突,开始用的cglib包是cglib-2.1.3.jar ,后来换了一个cglib-2.2.jar才测试通过