- 依赖的原则:
- 作用:解决模块工程之间的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
,反之亦然