今天二次开发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. return new Signature(name, returnType, paramTypes);
  6. }

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

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

4.排除冲突的包

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

 <!-- 添加printerServer -->
<dependency>
<groupId>com.founder</groupId>
<artifactId>dubbo-printer</artifactId>
<version>0.0.3-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>cglib</artifactId>
</exclusion>
</exclusions>
</dependency>

最新文章

  1. Azure上的几个坑
  2. Linux C编程学习之开发工具3---多文件项目管理、Makefile、一个通用的Makefile
  3. Spring MVC 学习 -- 创建过程
  4. MVC 数据验证【转】
  5. 记一次mysql故障恢复
  6. 学习c++
  7. easyui-datebox 只显示年月
  8. linux 磁盘管理学习笔记
  9. lintcode 中等题:N Queens N皇后问题
  10. 跟我一起学习VIM - The Life Changing Editor
  11. 让iframe调用页面的背景透明
  12. ##2.基础服务(SQl,RabbitMQ)-- openstack pike
  13. 平方根的C语言实现(二) —— 手算平方根的原理
  14. SpringBoot使用qq邮箱发送邮件
  15. 【java编程】java的关键字修饰符
  16. 【Spark调优】:尽量避免使用shuffle类算子
  17. docker commit 制作镜像
  18. 如何关闭D10 启动后自动打开的 WelCome页
  19. 实验三 Java猜数字游戏开发
  20. 开启otl的64位长整数支持

热门文章

  1. JS-textarea限制输入字数
  2. MemSQL start[c]up Round 1.b
  3. docker的本地仓库换成阿里云的镜像仓库
  4. 使用 paramsPrepareParamsStack 拦截器栈后的运行流程
  5. Hadoop伪分布安装详解(二)
  6. 01. Java序列化与反序列化简介
  7. Ningx代码研究.
  8. Linux基础配置
  9. celery-rabbitmq 安装部署
  10. Matlab GUI memo