jar包冲突

jar包冲突现象

某天在maven项目中,启动的时候,突然报了这个错误:

java.lang.nosuchmethoderror: org.springframework.beans.factory.annotation.injectionmetadata.needsrefresh

查找原因

在出现这个错误以前,我只是在项目中多加了一个dependence,我猜想应该就是新加的这个依赖导致问题的出现,

  1. 通过我查找 stackoverflow 以及分析源码分析得到,这个方法只存在于spring 4.X中,但是spring 3.X是没有这个方法的。
  2. 项目中本来引用的都是spring 4.X 的 依赖,一开始也是存在这些方法的,后来发现是在新引入的依赖中,又依赖了spring 3.x 的依赖,直接形成了传递依赖。
  3. 然后项目居然会直接的采用旧的版本,而采用新的版本,原因在就在于maven 的最短路径路径优先原则,根据maven 的依赖图来看,spring 3.x的版本是要更近一些的,所以项目启动时会使用它,而舍弃了原来的较远一些的4.x

解决办法

  1. 这里建议,如果公司内部jar包依赖不是很规范,到处都是传递依赖的情况下,应该直接禁用传递依赖,如下图

<dependency>  
    <groupId>org.apache.hbase</groupId>  
    <artifactId>hbase</artifactId>  
    <version>0.94.17</version>  
    <exclusions>  
        <exclusion>  
            <groupId>*</groupId>  
            <artifactId>*</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值