之前说过了可以通过依赖的方式将一个大程序分为多个小的模块,模块之间可以利用依赖链接在一起。 但是如果有多个依赖的情况下会怎么样呢? A依赖于B、C,而B、C又有各自的依赖,那么A是否依赖于B、C的依赖呢? 答案是是的,因为具有依赖传递的特性。

那么如果传递依赖中出现了包版本依赖冲突的问题,算那个包呢? 情况一:特殊优先:在一个pom.xml中添加两个不同版本的Junit依赖:后配置的覆盖先配置的。 情况二:路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。

A通过B间接依赖到E1、通过C间接依赖到E2,A就会间接依赖到E1和E2,Maven会按照层级来选择,E1是2度,E2是3度,所以最终会选择E1。

情况三:声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。

A通过B间接依赖到D1、通过C间接依赖到D2,D1和D2都是两度,这个时候就不能按照层级来选择,需要按照声明来,谁先声明用谁,也就是说B在C之前声明,这个时候使用的是D1,反之则为D2。

如果想更全面的查看Maven中各个坐标的依赖关系,可以点击Maven面板中的show Dependencies 如果出于某些原因,我不想使用传递依赖下的某个包,怎么办呢?

方法一:可选依赖

可选依赖指对外隐藏当前所依赖的资源—不透明

com.itheima

maven_03_pojo

1.0-SNAPSHOT

true

方法二:排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

com.itheima

maven_04_dao

1.0-SNAPSHOT

com.itheima

maven_03_pojo

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: