一、历史回顾
(一)、依赖性传递
A.jar ---> B.jar ---> C.jar
要使 A.jar ---> C.jar:当且仅当B.jar依赖于C.jar的范围是compile。
例:Demo2 ---> Demo1 ---> junit
把Demo2中的junit的删除,Demo1中的pom.xml依赖junit的<scope>修改成compile。然后研究Demo2 ---> junit 之间的关系。
二、依赖传递性及依赖原则及统一版本及统一编码
(一)、Maven依赖的原则
1、路径最短优先原则(为了防止冲突)
例:如果Demo2自己本身依赖的junit的版本是3.8,并且Demo2依赖Demo1,Demo1依赖junit的<scope>是compile,这个junit的版本是4.0。那么Demo2依赖本身的junit3.8还是junit4.0呢?
答:肯定是junit3.8。因为根据路径最短优先原则。
2、路径长度相同:
a、在同一个pom.xml文件中有2个相同的依赖(覆盖):后声明的依赖覆盖前面声明的依赖(严禁使用本情况,即严禁在同一个pom.xml中声明2个版本不同的依赖)。
例:在Demo2中有两个依赖,前一个是junit3.8,后一个是junit3.7。(这个测试自己在本机上尝试一下,我这里就不图示了)
答:后一个依赖覆盖前面的依赖。所以这里的结果就是junit3.7。
b、如果是不同的pom.xml文件中有两个路径相同长度的依赖(优先):则先声明的依赖,会覆盖后声明的依赖。
例:Demo2依赖着Demo1的junit4.0版本,同时又依赖着Demo3的junit3.8版本,到底使用哪一个测试呢?(这个测试自己在本机上尝试一下,我这里就不图示了)
(二)、Maven统一JDK版本
a、Maven统一JDK版本
这个<profile>不仅能统一JDK版本,也能统一其它很多。这里使用它统一JDK版本。
例:统一JDK版本,具体配置如下图所示:
b、Maven统一常量的版本号(一般这个会统一成一个文件)
例:统一JDK版本,具体配置如下图所示: