有时候当传递性依赖造成问题的时候,我们就需要清楚地知道该传递性依赖是从哪条依赖路径引入的。
加入项目A有这样的依赖关系:A->B->C->X(1.0),A->D->X(2.0),X是A的传递性依赖,但是这两条依赖路径上有两个版本的X,那么哪个X会被maven解析使用呢?两个版本都被解析显然是不对的以为会造成依赖重复,因此必须选择一个。
maven依赖调解的第一原则是:路径最近者优先。该例中X(1.0)的路径长度为3,而X(2.0)的路径长度为2,因此X(2.0)会被解析使用。
依赖调解第一原则不能解决所有问题,比如这样的依赖关系:A->B->Y(1.0),A->C->Y(2.0),Y(1.0)和Y(2.0)的依赖路径长度是一样的,都为2。maven定义了依赖调解第二原则:在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用,顺序最靠前的那个依赖优胜,该例中如果B的依赖声明在C之前,那么Y(1.0)就会被解析使用。