maven jar包冲突解决三板斧

  • Post author:
  • Post category:其他




背景

使用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 版权协议,转载请附上原文出处链接和本声明。