见到如下错误,可以想到是不是jar包冲突
1.java.lang.NoSuchMethodError
2.java.lang.ClassNotFoundException
3.java.lang.NoClassDefFoundError
解决办法
以一个错误为例:
解决方法:
1.首先定位到具体类。查到org.apache.httpHost对应的maven依赖。在intellij idea中search everywhere输入类名,找到依赖。或者百度一下。
2.打开httpHost类,找到具体的报错位置。根据错误信息,HttpRoute的106行报错。找到错误。注意,错误信息依据提示了jar包版本为4.4,所以找到4.4所对应的类。
可以看到错误位置,点击进入此类,定位到具体jar包。
可以看到4.1.4版本到httpcore并没有需要的构造方法。系统里存在两个版本,一个是4.1,一个是4.4,系统调到4.1的找不到新方法,所以报noSuchMethodException().
所以我们要做的就是在maven中排除掉。4.1.4版本。
3.通过名字:com.alibaba.external:httpcomponent.httpcore我们知道,groupId为冒号前的com.alibaba.external,artifiedId为冒号后的:httpcomponent.httpcore
我们打出maven tree进行全文搜索即可定位到在哪个依赖的gav中排除。进入pom所在目录,mvn dependency:tree > treeweb.txt 就可以把tree信息存在了txt文件中,再全文搜索com.alibaba.external即可。找到具体位置后,定位到在哪个依赖中排除。
4.排除依赖
<exclusions>
<exclusion>
<groupId>com.alibaba.external</groupId>
<artifactId>httpcomponents.httpcore</artifactId>
</exclusion>
</exclusions>
5.重新导入maven依赖就可以了
注意
一个类的jar包名可以随意改,所以一定注意,不能通过jar报名来找,要通过类名找,然后定位到具体的依赖jar包进行排除。