Maven 的依赖具备传递性,一个项目会依赖很多包,这些依赖包又会依赖其它包,从而构成复杂的依赖关系,这其中相同的包可能会被多次依赖,如果依赖了多个版本,就会产生冲突,此时,Maven 需要一个选择策略,从多个版本中选择一个版本。
Maven 会根据以下两个原则来处理版本问题
最短路径优先原则
在项目依赖关系中,路径最短的版本会被使用。
例如:A 依赖两个版本的 C,依赖路径分别为
- 路径1:A -> B -> C(1.0)
- 路径2:A -> D -> E -> C(2.0)
路径1的距离比路径2的距离更短,所以 A 最终会选择路径1的 1.0 版本,虽然路径2的版本更高。
最先声明原则
当依赖路径一样长时,则采用最先声明原则,选择在 pom 文件中声明顺序更靠前的版本。