maven依赖传递性 -maven依赖继承 -maven依赖排除 -maven依赖原则 -maven构建多模块工程

目录

一、依赖的传递性

二、依赖原则

三、依赖排除

四、举例

五、Tips

六、其它maven相关博客


一、依赖的传递性

  1. 好处:可以传递的依赖(compile范围)不必在每个模块工程中都重复声明,在“最下面”的工程中依赖一次即可。可参考:maven依赖范围
  2. 注意:非compile范围的依赖不能传递。所以在各个工程模块中,如果有需要就得重复声明依赖。

二、依赖原则

  1. 一个工程(可以打成一个jar包或者war的模块)下,只会依赖某个jar包的一个版本,包括依赖传递过来的jar包(也会转化成其中的某一个版本)。
  2. 如果是打成war包,我们可以从war包的lib文件夹里看到,同一个jar包只依赖一个版本。
  3. 如果是打成jar包,该jar包所依赖的其它jar包是不打到这个jar包里面的。
  4. 解决模块工程之间的jar包冲突问题,maven根据自己的内置原则自动处理冲突。
  5. 加载哪个版本jar包的原则
    1. 路径最短者优先原则
    2. 先声明者优先:dependency标签的声明顺序

三、依赖排除

  1. 一个工程依赖某个jar包,可以排除这个jar包依赖的某些jar包,但是并不是说这个工程不需要这个jar包了,而且在其它地方已经依赖了,或者依赖了可以替代的jar包
  2. 依赖排除的设置方式
    
    	xin.yangshuai.maven
    	HelloFriend
    	0.0.1-SNAPSHOT
    	compile
    	
    		
    			commons-logging
    			commons-logging
    		
    	
    

     

四、举例

  1. 路径最短者优先原则
    1. maven依赖传递性 -maven依赖继承 -maven依赖排除 -maven依赖原则 -maven构建多模块工程_第1张图片
    2. 依赖顺序:SecondTest,ThirdTest,FirstTest:2.0
    3. 最终依赖的FirstTest版本:WebTest工程一共引入了3个FirstTest jar包,距离最近的是FirstTest:2.0,所以WebTest工程依赖的是FirstTest:2.0
    4. 注意:此时WebTest工程依赖的是FirstTest:2.0,war的lib文件夹下也是FirstTest:2.0,FirstTest:1.0并没有打到war包里面,所以在这个工程里面,SecondTest也变成依赖FirstTest:2.0了
  2. 先声明者优先:dependency标签的声明顺序
    1. maven依赖传递性 -maven依赖继承 -maven依赖排除 -maven依赖原则 -maven构建多模块工程_第2张图片
    2. 依赖顺序:SecondTest,ThirdTest
    3. 最终依赖的FirstTest版本:WebTest工程一共引入了2个FirstTest jar包,距离相同,FirstTest:1.0先声明,所以WebTest工程依赖的是FirstTest:1.0
    4. 注意:此时WebTest工程依赖的是FirstTest:1.0,war的lib文件夹下也是FirstTest:1.0,FirstTest:2.0并没有打到war包里面,所以在这个工程里面,ThirdTest也变成依赖FirstTest:1.0了
  3. 简单的测试工程,可以测试上面所说的内容:https://gitee.com/shuair/testMaven.git

五、Tips

  1. 如有不对的地方还请告知,感激不尽

  2. 参考视频教程:http://www.gulixueyuan.com/my/course/42

六、其它maven相关博客

  1. maven依赖范围:https://blog.csdn.net/shuair/article/details/105350415
  2. maven依赖传递性:https://blog.csdn.net/shuair/article/details/105401296
  3. maven统一依赖版本号:https://blog.csdn.net/shuair/article/details/105404764
  4. maven聚合:https://blog.csdn.net/shuair/article/details/105416365

你可能感兴趣的:(maven,maven)