Maven依赖调解(依赖了一个包的不同版本,哪个生效)
如果因为某种原因,使得项目依赖了同一个包的不同版本,maven会解析哪个版本呢?
一、 路径最短优先
假设有如下依赖
A->B->C->X(1.0),A依赖B,B依赖C,C依赖X的1.0版本
A->D->X(2.0),A依赖D,D依赖X的2.0版本
那么A最终会依赖X的哪个版本呢?因为Maven有路径最短优先原则,所以最终会以A->D->X(2.0)这条路径解析,依赖X的2.0版本。
二、 第一声明者优先
然而,路径最短优先并不能解决所有的问题,假设有如下依赖
A->B->Y(1.0)
A->C->Y(2.0)
两者的路径长度是一样的,此时适用第一声明者优先规则,即哪个先声明就以哪个优先。