背景
使用maven管理spring项目,有时引了三方jar包后发现框架启动不了,报某个方法不存在,或者类找不到。这个时候就要考虑是否是依赖冲突了(越是基础的组件越容易冲突,入日志包log4j或者json工具类如jackson)。
问题根源
A依赖于jar包B和C,B和C分别依赖了D的两个不同版本,这时A该依赖D的哪个版本呢?这就看Classloader的加载顺序了,假设Classloader先加载D的老版本,没加载新版本,血案就这样不期而遇了。
一板斧
mvn dependency:tree
优点:
简单,可视化清晰
缺点:
不能查看到所有的传递依赖
使用场景:先用这个可以解决90%问题
二板斧
mvn dependency:tree -Dverbose
优点:
全!!!
缺点:
太多了看得晕
使用场景:一板斧没定位到问题之后用这个找出可疑对象
三板斧
mvn dependency:tree -Dverbose -Dincludes=asm:asm
优点:
可以指定要看的包
缺点:
包名要自己填上
使用场景:一板斧没定位到问题,二版斧找到怀疑对象,用这个仔细分析
版权声明:本文为timothytt原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。