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实战

posted @ 2020-08-11 15:57  kylinmac  阅读(277)  评论(0)    收藏  举报