maven-聚合、继承
聚合
maven聚合需要创建一个新的maven项目,用来管理其他的maven构件模块,新的maven项目中加入如下配置:
<modules>
<module>模块1</module>
<module>模块2</module>
<module>模块n</module>
</modules>
<package>pom</package>
新的项目中执行任何mvn命令,都会让modules中包含的所有模块执行同样的命令,而被包含的模块不需要做任何特殊的配置,正常的maven项目就行。
注意:上面的module元素,这部分是被聚合的模块pom.xml所在目录的相对路径或绝对路径
package的值必须为pom
继承
- 创建一个父maven构件,将依赖信息放在xml中
<dependencies>
<dependency>依赖的构件的坐标信息</dependency>
<dependency>依赖的构件的坐标信息</dependency>
<dependency>依赖的构件的坐标信息</dependency>
</dependencies>
- 将父构件的package元素的值设置为pom
<packaging>pom</packaging>
- 在子构件的pom.xml引入父构件的配置
<parent>
<groupId>父构件groupId</groupId>
<artifactId>父构件artifactId</artifactId>
<version>父构件的版本号</version>
<!-- 标识父构件pom.xml相对路径,默认是../pom.xml -->
<relativePath>父构件pom.xml路径</relativePath>
</parent>
relativePath元素
如果父构件和目录不是父子关系,比如都位于同等级的目录或者位于更复杂的目录的时候,此时我们需要在子pom.xml的parent元素中使用relativePath原则来指定父pom.xml相对路径位置,默认../pom.xml,标识pom.xml位于子pom.xml的上一级
正确的设置relativePath是非常重要的,这个要主要,子模块中执行mvn命令时,会去找pom.xml的配置,会通过relativePath指定的路径去找,如果找不到,会尝试通过坐标在本地仓库在进行查找,如果本地找不到,会去远程仓库找,如果远程仓库也没有就会报错
可以继承的元素
元素 | 描述 |
---|---|
groupId | 项目组id |
version | 项目版本 |
description | 项目的描述 |
organization | 项目的组织信息 |
inceptionYear | 项目的创始年份 |
url | 项目url地址 |
developers | 项目开发者信息 |
contributors | 项目贡献者信息 |
distributionManagement | 项目的部署配置信息 |
issueManagement | 项目的缺陷跟踪系统信息 |
ciManagement | 项目的持续集成系统信息 |
scm | 项目的版本控制系统信息 |
mailingLists | 项目的邮件列表信息 |
properties | 自定义的maven属性配置信息 |
dependencyManagement | 项目的依赖管理配置 |
repsitories | 项目的仓库配置 |
build | 包括项目的源码目录配置、输出目录配置、插件管理配置等信息 |
reporting | 包括项目的报告输出目录配置、报告插件配置等信息 |
总结
聚合主要是为了方便多模块快速构件
而继承主要是为了重用相同的配置
对于聚合来说,聚合模块是知道被聚合模块存在的,而被聚合模块是感知不到聚合模块存在
对于继承来说,父构件是感知不到子构件的存在,而子构件需要使用parent来引用父构件
两者的共同点是,聚合模块和继承中的父模块的package属性都必须是pom类型的