(四)maven依赖冲突解决

本文围绕Maven依赖冲突展开,介绍了依赖冲突是因Maven依赖调节机制选错版本,由传递性依赖和依赖调解导致。通过具体示例说明冲突产生原因,提出使用最新版本、手动强制指定版本解决冲突,还介绍用mvn dependency:tree命令分析依赖链条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、什么是maven的依赖冲突

2、依赖冲突是如何产生的?

3、如何解决这样的依赖冲突?

4、mvn depedency:tree这个命令


1、什么是maven的依赖冲突

  • maven依赖调节机制选择错了版本(路径长度不同[就近原则],路径长度相同[先声明原则])
  • 某某某class not found

  • 某某某方法() not found

  • MyClass.doMethod() not found。。。。

  • 这个就是典型的工作场景里面的依赖冲突问题
  • 传递性依赖 + 依赖调解,导致了这个问题

2、依赖冲突是如何产生的?

  • 比如X依赖了A和B,此时A依赖了C-1.0,B依赖了D,D依赖了C-2.0

X -> A -> C-1.0

X -> B -> D -> C-2.0

  • 此时就会导致的事情是,由于A -> C1.0是最短路径,所以会用C1.0
  • 但是坑爹的事情发生了,B依赖的是D,D依赖的C结果用了C-1.0版本
  • D本来用的是C-2.0的一个方法,但是现在给D的是C-1.0的一个类
  • 比如C-1.0的类CClass.sayHello()
  • C-2.0给类CClass加了一些方法,比如CClass.printHello(),同时也有CClass.sayHello()方法
  • D调用了C-2.0里面的printHello()这个方法
  • 如果用的时C-1.0,把C-1.0的CClass提供给D去用,D去调用printHello()方法的时候,就会报错。。。
  • C这个项目的CClass这个类的printHello()这个方法没有找到,not found的异常

3、如何解决这样的依赖冲突?

  • 一般来说,用最新的版本
  • 因为新版本一般可以兼容旧版本,但是旧版本一定不会提供新版本的功能。
  • 你不要让maven自动去选择C-1.0来使用,而是手动强制使用C-2.0.

4、mvn depedency:tree这个命令

  • mvn dependency:tree,用dependency插件的tree goal,执行,进行依赖链条分析
  • 比如你发现C这个项目下报出了类似的问题,然后就用mvn dependency:tree这个命令看一下整个项目的依赖路径树
  • 看看所有的依赖路径里,有哪几个版本的C项目,看一下,自己看看要用哪个版本的C,然后将其他的C版本的依赖全部手动排除掉

此时要做的事情就是。。。

在A下面

<dependency>
<groupId>A</groupId>
<artifactId>A</artifactId>
<version>1.0</version>
<exclusions>
    <exclusion>
        <groupId>C</groupId>
        <artifactId>C</artifactId>
    </exclusion>
</exclusions>
</dependency>

这样的话,就只剩下了一个C-2.0,那肯定是用C-2.0楼,无论是A还是D,都是用C-2.0了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海拾贝2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值