之前说过了可以通过依赖的方式将一个大程序分为多个小的模块,模块之间可以利用依赖链接在一起。 但是如果有多个依赖的情况下会怎么样呢? 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 如果出于某些原因,我不想使用传递依赖下的某个包,怎么办呢?
方法一:可选依赖
可选依赖指对外隐藏当前所依赖的资源—不透明
方法二:排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
精彩内容
发表评论