这个问题主要是由于包冲突引起的,个人理解的产生问题是原因如下:
由于a.jar依赖于b.jar,你的jre在编译时先加载了a.jar,加载后便在里面寻找对应的方法,但是a.jar里没有这个方法,于是jre放弃了寻找,抛出了no method问题。、
刚出这个问题时,我还专门跑到b的jar包里查class,看到里面明明有那个method,就晕了。
查了很多资料后发现解决这个问题的方法还是取消掉包的依赖性最好,具体操作如下:
选中报错的class,ctrl+shift+t,呼出一个界面,上面详细显示了含有这个class的jar,找到出问题的相同前缀的条目,记下对应的不应该执行的x1.jar、x2.jar...,然后打开cmd,cd到相应的工程下用pom文件分析jar包依赖(mvn dependency:tree),找到x1.jar、x2.jar包依赖的A.jar包,在pom文件的A.jar的<dependency>标签中加上类似下的代码,问题就解决了
<exclusions>
<exclusion>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-api</artifactId>
</exclusion>
</exclusions>
今天又发现一个找出错包来源的方法,起因是碰到了AbstractMethodError,又是包冲突导致的,在上述的Ctrl+shift+T之后,打开pom文件,点击Dependency Hierarchy标签,在右上角Filter里查找出错的包名,在左侧视窗中看到这个出错的包属于哪个依赖,然后进入pom.xml对应的依赖包内添加上述语句。