- 依赖的原则:
- 作用:解决模块工程之间的jar包冲突问题
- 情景设定1:验证路径最短者优先原则
我们可以看到上图MakeFriends依赖于HelloFriend,HelloFriend依赖于Hello,Hello依赖log4j.1.2.17这个版本,按照依赖的传递性,MakeFriends里面Maven也会帮你自动的把log4j.1.2.17传递过来,但是呢我们现在假设HelloFriend因为某些需要要依赖log4j.1.2.14这个版本,按照依赖的传递性,log4j.1.2.14也应该传递到MakeFriends中来,这个时候MakeFriends就犯难了,到底该依赖哪个好呢?
Maven里面默认依赖是遵循验证路径最短者优先原则,看图知道MakeFriends到log4j.1.2.17要走三步,而到log4j.1.2.14只需要走两步,所以Maven默认传递过来的依赖会是log4j.1.2.14,这时如果你想要依赖log4j.1.2.17就要明确声明你要依赖log4j.1.2.17才可以! - 情景设定2:验证路径相同时,先声明者优先
这里的先声明指的是<dependency></dependency>标签的声明顺序
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>OurFriends</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>HelloFriend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
像上面这样OurFriends声明在前面,默认传递过来的依赖就是log4j.1.2.17,反之亦然
本文介绍了Maven项目中处理依赖冲突的两个核心原则:验证路径最短者优先及验证路径相同时先声明者优先。通过具体例子展示了如何解决模块间的jar包版本冲突问题。
521

被折叠的 条评论
为什么被折叠?



