maven依赖错误排查经验

maven错误排查经验

maven依赖的仲裁原则

  • 有parent的情况先合并parent中的dependencies和dependencyManagement,到当前pom的dependencies和dependencyManagement,依照上层覆盖下层原则
  • 不同路径深度,短路径优先;
  • 相同路径深度,相同区域(dependencies或者dependencyManagement),深度为1后引入优先,深度不为1时,先引入为先
  • 相同路径深度,不同区域,dependencies区域优先
  • 只有最上层的dependencyManagement起作用,其他层的dependencyManagement将被忽略;

示例:

  1. 不同路径,短路径优先

    C --> A 1.0 -->B 1.0
    --> B 2.0

    最终是依赖于2.0

  2. 相同路径,路径为1后引入优先

    C --> A 1.0
    --> A 2.0
    最终依赖于A 2.0

  3. 相同路径,路径不为1先引入优先

    C --> A 1.0 --> B 1.0
    --> D 1.0 --> B 2.0
    最终依赖于B 1.0

    常见的问题

    由于pom依赖的问题,导致jar版本冲突,报错信息NoSuchMethodException,同类问题ClassNotFoundException、NoClassDefException、ClassCastException

排查方式
  1. -XX:+TraceClassLoading
    加启动参数,会把这个类是从哪个jar包加载的打印出来
  2. jar -tvf *.jar
    tomcat 从lib目录下加载jar包,解压打印所有的类,查找包名类名相同的,如果存在且md5不一样,就是版本冲突

    解决方式:

    mvn中做exclusion

心得体会:

最近在排查依稀pom依赖冲突,应用依赖了IC和UIC的相关pom,在升级相关版本的时候,jar包冲突,而且有很多依赖代码并没有实际引用,但是在启动的时候报了NoClassDef。

通常情况下,这种升级某个pom依赖后导致的jar包问题,最好的方式:在升级的版本依赖dependency是exclusion对应的冲突jar,一开始也是这样解决的,但是依然部署不起来,按照道理来讲,排除了这个依赖以后,应该是其他依赖包引入的。进过排查,有两个原因:

  • 发现原来的spring升级不成功,导致依赖的pom实际是IC的pom,而exclusion后,版本降低,代码报错
  • 同路径依赖,原先也是依赖IC的pom,排除以后,依赖版本不对进而报错

    A -- IC --> B 3.0
    C --> D --> B 2.0
    E --> F --> B 1.0

这种情况下,原理依赖的B 3.0,由于升级了IC,exclusion B,之后B依赖版本降低,导致的

转载于:https://www.cnblogs.com/kakaxisir/p/6527487.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值