java.lang.Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

时间:2022-05-12 21:00:17

有时候出现这种怪异的问题,是由于多个版本的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.Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

java.lang.Throwable
      

java.lang.Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

java.lang.Error
          

java.lang.Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

java.lang.LinkageError
              

java.lang.Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

java.lang.IncompatibleClassChangeError
                  

java.lang.Error: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

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才测试通过