maven的依赖传递

maven2提供了强大的依赖传递管理。

传递依赖的意思简单的理解为A->B-C,则在A的pom中不必声明对C的依赖,maven会自动进行依赖传递。

当依赖传递有环时为错误。

传递依赖是没有数量限制的,所以其依赖的pom数量会急剧增大。所以有以下功能来调整。

依赖调停:

当有多个artifact出现在依赖传递中时,决定用哪个版本。maven2支持最近定义,如A->B->C- D1,A->E->D2,则D2胜。如果深度相等,则2.0.8以前无定义谁胜,2.0.9以后先声明者胜。当然,也可以明确直接定义在A中来解决问题。

依赖管理:

将要依赖的artifact直接声明在当前pom文件中。

依赖范围:

决定不同的stage的依赖关系。

排除依赖:

X->Y-Z,X可以在exclusion元素中声明不依赖Z.

默认排除:

Y->Z,X->Y,Y可以设置对Z的依赖为optional依赖,这样X就对Z没有依赖了。


6种依赖的scope,compile,provided,runtime,test,system,import。

note:判断依赖引用用的是{groupId, artifactId, type, classifier},一般情况下 type默认为jar可以不写。

note:依赖管理和依赖是不同的。依赖管理为<dependencyManagement>,依赖为<dependencies>,可以用<dependencyManagement>来管理jar包的版本号。

注意这里有可能导致混乱,当前pom,父pom,依赖传递的pom中都有可能同时声明<dependencyManagement> 和<dependencies>来指定版本号。优先级的规则尽量不要记,好的实践是用总的祖先pom 用<dependencyManagement>管理版本号,除了这个地方,其他地方不设定版本号。

当前的依赖管理优先于父pom的依赖管理。
依赖管理优先于依赖调停。


查看项目依赖
命令: mvn dependency:analyze

列出项目中所有的直接和传递性依赖。
命令: mvn  dependency:tree

猜你喜欢

转载自zhang-xzhi-xjtu.iteye.com/blog/697742