jar包冲突的一些解决方案及定位包的位置

常见的jar包冲突报错信息有:NoSuchMethodError, ClassNotFoundException, NoClassDefFoundError等等(还有个什么来着,搞忘记了)

原因:maven里引用了同一个坐标的jar的不同版本

解决方案:

1. mvn dependency:tree 
    mvn dependency:tree # 可以看到整个项目的jar包依赖树,在控制台
    mvn dependency:tree  -Dverbose  # 查看完整依赖
    mvn dependency:tree>tree.txt # 将依赖结果存成文件
    mvn dependency:tree -Dverbose -Dincludes=*guava* # 查看某个具体的jar的依赖信息


2. Intellij插件MavenHelper
    网上有很多关于这个插件的介绍和使用,可以参考
    https://www.cnblogs.com/happyflyingpig/p/11238713.html



3. maven-shade-plugin
    关于这个插件的介绍和原理,我也是看了下面这篇文章才明白的,大家可以参考一下。
    https://zhuanlan.zhihu.com/p/62796806


前言:

在企业开发中,公司项目各模块的依赖是比较复杂,往往是A模块中依赖了B、C、D…等模块,此时我们若想在A模块中查找某个jar依赖就会很麻烦,因为无法在A的pom.xml中直接搜索到。最笨的方法就是对A模块依赖的其他模块进行逐一搜索,但我想你并不想这么做。下面我通过一个实际的案例,来简单地谈谈 IDEA 如何快捷地找到相应的pom.xml。

场景:

在项目中,我引入了org.json.JSONArray这个类,编译时期没有报错,但启动项目的时候却出现ClassNotFoundException,这让我很郁闷。后面一想,可能是该依赖的maven生命周期出现问题,所以只好先去看看该依赖的pom.xml了。

解决步骤:

1. 确定要查找jar的 artifactId

2. 打开项目的maven依赖图

3. 在依赖图上搜索上面找到的artifactId,这里是android-json

4. 在图上找到相应的元素后,鼠标双击便能进入jar的pom.xml

进来后,我们能很清楚地看到该依赖上面写着Compile编译期有效,这样问题就明确了。(如果你不相信上面的注释,可以用上面的方法,在依赖图上搜索spring-boot-configuration-processor这个jar,就会发现该依赖是<scope>provided</scope>)

5. 引入新的依赖



posted @ 2020-07-06 22:18  为爱奋斗不息  阅读(887)  评论(0编辑  收藏  举报