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. 引入新的依赖




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM