maven(八)maven的依赖范围、依赖传递、依赖冲突、聚合和继承
MAVEN
-
maven的依赖范围、依赖传递、依赖冲突、聚合和继承
目录
-
知识点
第一个0表示大版本号
第二个0表示分支版本号
第三个0表示小版本号
0.0.1
snapshot快照
alpha内部测试
-
maven依赖范围
Maven因为执行一系列编译、测试和部署运行等操作,在不同的操作下使用的classpath不同,依赖范围就是用来控制依赖与三种 classpath(编译classpath、测试classpath、运行classpath)的关系。<br>
依赖范围 scope<br>
compile:默认范围,使用此依赖范围对于编译、测试、运行三种 classpath 都有效,即在编译、测试和运行的时候都要使用该依赖jar包<br>
provided:编译测试有效
runtime:测试运行时有效
test:在测试时有效
system:与本机系统相关联,移植性差(和provided范围一致)
-
maven传递依赖
简单讲就是间接依赖关系,比如:B依赖A,C依赖B,那么C也就依赖A了,C和A的依赖关系就是传递依赖。<br>
Maven对于依赖的管理是这样的,当在POM.XML文件中发现配置了,某个依赖,就先去自己本地的依赖仓库中去找对应的依赖,如果没找到,就去Maven的中央依赖仓库中去找,如果还是没找到,就会生气报错。<br>
对于项目而言,比如上面的例子A/B/C我们需要在B的POM.XML依赖关系中配置上A的坐标,并且需要对A进行编译(compile)、打包(package)、安装(install)到本地仓库等工作,B才能实现对A的依赖。C依赖与B,并且B依赖与A,C的依赖库里会自动的将A项目的jar包也导进来的。如果我们不想这样,那么就需要用到排除依赖这个标签了<exclusion></exclusion>——此标签就是排除对传递依赖的依赖关系的一种方式。
另外,在settings.xml文件中可以设置maven默认jre版本——使用<profile></profile>标签
测试:
添加依赖坐标
执行结果
对B
执行clean compile
排除依赖
运行结果
-
maven依赖冲突
由于依赖的内容存在多个版本,如果出现某一个POM依赖多个版本时,则称之为依赖冲突
依赖冲突遵循两个原则:
1、短路优先(依赖的内容,传递次数越小越优先)
2、先声明则优先(在POM.xml中,哪个依赖的内容声明dependency靠前,则优先
-
Maven继承:父模块的pom文件修改
新增properties标签管理版本
将dependencies标签放入dependencyManagement标签中
-
Maven聚合:父模块的pom文件修改
<package>pom</package>
<modules>
<module>子模块项目名一</module>
<module>子模块项目名二</module>
</modules>
运行结果: