<parent/>标签
Maven项目之间,还可以存在相互继承的关系;Maven项目之间的继承关系是通过<parent/>标签来表示的;
Maven子项目可以继承父项目的如下配置信息:
①dependencies
②developers
③contributors
④plugin lists
⑤reports lists
⑥plugin executions with matching ids
⑦plugin configuration
<parent/>一共有4个子标签:
<groupId/>
<artifactId/>
<version/>
<relativePath/>该标签指定父项目的路径
<dependencyManagement/>标签
可以把<dependencyManagement/>理解为一个对jar包版本进行管理的管理器;<dependencyManagement/>运行逻辑如下:
如果<dependency/>中没有声明<version/>,在Maven则去<dependencyManagement/>中,根据<groupId/>和<artifactId/>作为查询条件去查询,如果能查到对应的jar则继承该jar所声明的<version/>,如果没有查到,则Maven抛出错误,提示开发者必须为其声明<version/>;
如果<dependency/>中声明了<version/>,那一切都以<dependency/>中声明的<version/>为准,不管<dependencyManagement/>有没有声明<version/>;
<dependencyManagement/>与<dependencies/>区别
<dependencies/>
根据<parent/>知识点得知,<dependencies/>会继承父工程所有的<dependencies/>,同时会下载对应的jar文件;
<dependencyManagement/>
只声明依赖,但不引入jar,因此子项目只需声明自己用到的依赖即可;
如果不在子项目中声明依赖,则不会从父项目中继承下来的;只有在子项目中写了该依赖项,且没有指定具体版本,才会从父项目中继承该项,至于version和scope则都继承父项目的pom;
如果子项目中指定了版本号,那么会使用子项目中指定的jar版本;
<dependencyManagement/>的使用场景
让其他子项目,都继承同一个父项目,这样,一个父项目的POM文件就可以对众多子项目的version和scope进行统一控制、统一修改;
具体来讲,就是使用dependencyManagement可以统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,不用为每个子项目都弄一个版本号,当需要变更版本号的时候只需要在父类容器里更新,不需要任何一个子项目的修改;
如果某个子项目需要另外一个特殊的版本号时,只需要在自己的模块dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号;
<type/>标签
Jar:单纯一个jar包;
pom:
当我们需要引入很多jar包的时候会导致pom.xml过大,
为了解决这个问题,我们引进一个pom,意思是:将所有的jar包打包成一个pom,然后我们依赖该pom来下载所有依赖的jar包;
<scope/>标签
控制dependency元素的使用范围。就是控制Jar包在哪些范围被加载和使用,具体含义如下:
①compile:默认值,如果没有指定 scope 值,该元素的默认值为compile。被依赖项目需要参与到当前项目的编译,测试,打包,运行等阶段。打包的时候通常会包含被依赖项目。
②provided:被依赖项目理论上可以参与编译、测试、运行等阶段,相当于compile,但是再打包阶段做了exclude的动作。例如, 如果我们在开发一个web 应用,在编译时我们需要依赖 servlet-api.jar,但是在运行时我们不需要该 jar 包,因为这个 jar 包已由应用服务器提供,此时我们需要使用 provided 进行范围修饰。
③runtime:表示被依赖项目无需参与项目的编译,但是会参与到项目的测试和运行。与compile相比,被依赖项目无需参与项目的编译。
④test:表示被依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。适用场景:例如,Junit 测试。
⑤system:与provided元素类似,但是被依赖项不会从maven仓库中查找,而是从本地系统中获取,systemPath元素用于制定本地系统中jar文件的路径。
⑥import:只使用在<dependencyManagement/>中,表示从其它的pom中导入dependency的配置;
1389



被折叠的 条评论
为什么被折叠?



