Maven的继承与聚合
一般来说,一个项目的子模块都应该使用同样的groupId,如果它们一起开发和发布,还应该使用同样的version,此外,它们的artifactId还应该使用一致的前缀,以方便同其他项目区分。
1. 聚合

需要一个额外的模块作为一个聚合项目,通过该模块整体构建所有子模块
2.继承


上述POM中使用parent元素声明父模块,parent下的子元素groupId、artifactId和version指定了父模块的坐标,这三个元素是必须的。元素relativePath表示父模块POM的相对路径,该例中的../account-parent/pom.xml表示父POM的位置在与account-email/目录平行的account-parent/目录下。当项目构建时,Maven会首先根据relativePath检查父POM,如果找不到,再从本地仓库查找。relativePath的默认值是../pom.xml,也就是说,Maven默认父POM在上一层目录下。
正确设置relativePath非常重要。考虑这样一个情况,开发团队的新成员从源码库签出一个包含父子模块关系的Maven项目。由于只关心其中的某一个子模块,它就直接到该模块的目录下执行构建,这个时候,父模块是没有被安装到本地仓库的,因此如果子模块没有设置正确的relativePath,Maven将无法找到父POM,这将直接导致构建失败。如果Maven能够根据relativePath找到父POM,它就不需要再去检查本地仓库。
3.可继承的POM元素
·groupId:项目组ID,项目坐标的核心元素。
·version:项目版本,项目坐标的核心元素。
·description:项目的描述信息。
·organization:项目的组织信息。
·inceptionYear:项目的创始年份。
·url:项目的URL地址。
·developers:项目的开发者信息。
·contributors:项目的贡献者信息。
·distributionManagement:项目的部署配置。
·issueManagement:项目的缺陷跟踪系统信息。
·ciManagement:项目的持续集成系统信息。
·scm:项目的版本控制系统信息。
·mailingLists:项目的邮件列表信息。
·properties:自定义的Maven属性。
·dependencies:项目的依赖配置。
·dependencyManagement:项目的依赖管理配置。
·repositories:项目的仓库配置。
·build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等。
·reporting:包括项目的报告输出目录配置、报告插件配置等。
4.依赖管理
Maven提供的dependencyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。在dependencyManagement元素下的依赖声明不会引入实际的依赖,不过它能够约束dependencies下的依赖使用。

子类再引入依赖时,可以省去version配置
<dependencyManagement>中的scope可以为import,代表将目标pom中的dependencyManagement配置导入并合并到当前pom中,此时dependency的type一般为pom。
5.插件管理

6.约定优于配置
·源码目录为src/main/java/
·编译输出目录为target/classes/
·打包方式为jar
·包输出目录为target/
7.反应堆
在一个多模块的Maven项目中,反应堆(Reactor)是指所有模块组成的一个构建结构。对于单模块的项目,反应堆就是该模块本身,但对于多模块项目来说,反应堆就包含了各模块之间继承与依赖的关系,从而能够自动计算出合理的模块构建顺序。
模块间的依赖关系会将反应堆构成一个有向非循环图。
Maven提供很多的命令行选项支持裁剪反应堆,输入mvn-h可以看到这些选项:
·-am,--also-make同时构建所列模块的依赖模块
·-amd-also-make-dependents同时构建依赖于所列模块的模块
·-pl,--projects<arg>构建指定的模块,模块间用逗号分隔
·-rf-resume-from<arg>从指定的模块回复反应堆
-----------------------摘自 Maven实战

浙公网安备 33010602011771号