• java.lang.NoSuchMethodError: net.sf.cglib.core.Signature


     今天二次开发Dubbo-admin的管理平台,开启tomcat直接报错,错误关键字为“ java.lang.NoSuchMethodError: net.sf.cglib.core.Signature”,幸好dubbo框架在业界用的比较多,很快到了错误解决方法。

    这个错误是因为添加的自己项目jar包中和原有的dubbo中引用的jar包冲突导致。

    解决方法和步骤

    1. 查看异常堆栈信息

    堆栈信息很长,但基本有两部分内容:一是运行时抛出的错误信息;二是“Caused by”后面的具体原因说明。

    我们主要看第二部分(Caused by: java.lang.NoSuchMethodError: net.sf.cglib.core.Signature.<init>(Ljava/lang/String;Lnet/sf/cglib/asm/Type;[Lnet/sf/cglib/asm/Type;)V)这些信息。

    2. 分析冲突类

    从异常堆栈信息中可以明显看出是“Signature”这个类出了问题,然后再IDE中查询出这个类都在哪些类中。

    以IntelliJ IDEA为例,在应用中双击“shit”键即可看到该类在哪些包中,搜索的时候记得带上完整的包路径名称,即“net.sf.cglib.core.Signature”,搜索结果如下:

    我们可以明显的看出,“net.sf.cglib.core.Signature”这个类存在于两jar包中,cglib-nodep:2.2.2和cglib:2.2.2。

    3.确定冲突jar包

    找个了冲突的两个包后,我们就要接着分析是哪个包引起的冲突,以及需要保留哪个去除掉哪个。

    这时候就需要接着看之前的异常堆栈信息了:

    at com.alibaba.citrus.util.internal.DynamicClassBuilder.getSignature(DynamicClassBuilder.java:54) 

    这一行,指明了调用类及方法:DynamicClassBuilder.java。同样在idea中我们打开这个类的源码,并查看地54行代码:

    1. protected Signature getSignature(Method method, String rename) {  
    2.         String name = defaultIfNull(trimToNull(rename), method.getName());  
    3.         Type returnType = Type.getType(method.getReturnType());  
    4.         Type[] paramTypes = Type.getArgumentTypes(method);  
    5.   
    6.         return new Signature(name, returnType, paramTypes);  
    7.     }  

     接着在代码中,通过点击Signature类名,即可定位DynamicClassBuilder类中引用的Signature类在哪个包中:

    很明显,应用中真正依赖的是cglib-nodep:2.2.2这jar包,那么引起冲突的jar包是cglib:2.2.2。

    4.排除冲突的包

    冲突jar包定位到了之后,我们就需要再maven工程的pom.xml文件中将冲突jar给排除掉,使用“exclusion”命令即可:

     1 <!-- 添加printerServer -->
     2 <dependency>
     3     <groupId>com.founder</groupId>
     4     <artifactId>dubbo-printer</artifactId>
     5     <version>0.0.3-SNAPSHOT</version>
     6     <exclusions>
     7         <exclusion>
     8             <groupId>org.glassfish.hk2.external</groupId>
     9             <artifactId>cglib</artifactId>
    10         </exclusion>
    11     </exclusions>
    12 </dependency>
  • 相关阅读:
    Noe4j启动警告
    SpringBoot
    MySQL数据库 java SQL语句区分大小写分析
    day24 模块的语法
    day23 re模块
    day22 常用模块02 序列化
    day21 常用模块01
    day20 面向对象06 MRO和C3算法
    day19 面向对象05 约束
    day18 面向对象04 反射
  • 原文地址:https://www.cnblogs.com/guanghe/p/9341926.html
Copyright © 2020-2023  润新知