Maven-依赖调节

Maven引入的传递性依赖机制,一方面大大简化和方便了依赖声明,另一方面,大部分情况下我们只需要关心项目的直接依赖是什么,而不用考虑这些直接依赖会引入什么传递性依赖。但有时候,当传递性依赖造成问题的时候,我们就需要清楚的知道该传递性依赖是从哪条依赖路径引入的。

例如项目A有这样的依赖关系:

A -> B -> C -> X(1.0)、A -> D -> X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版本的X,那么哪个X会被Maven解析使用呢。Maven依赖调解的第一原则是:路径最近者优先。该例中(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 2.0.9开始,为了尽可能避免构建的不确定性,Maven定义了依赖调解的第二原则:第一声明者优先。在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用,顺序最靠前的那个依赖优胜。如果B的依赖声明在C之前,那么Y(1.0)就会被解析使用。

猜你喜欢

转载自blog.csdn.net/tjsahwj/article/details/84324932