如何定位java.lang.NoSuchMethodError

 

           在运行一个程序时,出现了如下错误,且编译器没有出现红框,也就是传说中的NoSuchMethodError

 


         

           由图中可以知道RegularExpression 有一构造方法RegularExpression(String a ,Sting b, Local local)  被调用啦,但我们提供的RegularExpression ,没有这个构造方法;  但根据名字我找到了JAR包xercesImpl.jar ,且找到了它的构造方法

 

 

     如图所示,郁闷,这不是有吗。  只能是JAR包冲突啦,在忙忙JAR包中如何去定位这个冲突的JAR包呢。 不会要我每个包都去检查一遍吧,好吧,我承认我是个屌丝,在百度无门与问领导失败的情况下,白痴的这么做个

 

        前段时间看JAVA深度历险时看到了个VERBOSE参数。我想到了它

        解释下verbose,加上此参数,它会打印出所有当你使用时需要使用到的CLASS文件

        java    -verbose   Test

 

       这样,我们就看到类的加载过程


 

在前面的几行中,我们发现org.apache.xerces.impl这PACKAGE 主要来自xercesImpl.jar.

 在第七行中,我们看到了org.apache.xerces.impl.xpath.regex.RegularExpression 来自xsdlib-20032005.jar

  这样,我们就成功找到了这个冲突的JAR包,果不其然,其中没有此RegularExpression(String a ,Sting b, Local local)构造函数

 

   这样我们移除此JAR的相关CLASS就可以解决这问题啦

 

   这里给了我们些提示的东西。。我们应该可以做一个去检测JAR包的工具,本人的对相关的API不是很熟,只能想到个笨的方法。就是解压所有到JAR,读取目录,组装类名,存到集合中,进行比较。如有大神有更好的建义,请指导。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值