Maven--聚合

如果想要一次构建多个项目,而又不想分别进入到所有项目的目录下分别执行 mvn 命令。就可以使用 Maven 的聚合(或者称为多模块)特性。

假设有两个模块 T-A 和 T-B,我们想要一次构建两个项目则需要创建一个额外的模块。这里创建一个名为 T-aggregator 的模块,然后通过 T-aggregator 模块构建整个项目的所有模块。T-aggregator 本身作为一个 Maven 项目,它必须要有自己的 POM,不过,同时作为一个聚合项目,其 POM 又有特殊的地方。

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>org.wzh.maven</groupId>
 6   <artifactId>T-aggregator</artifactId>
 7   <version>0.0.1-SNAPSHOT</version>
 8   <packaging>pom</packaging>
 9   <name>T-aggregator</name>
10   <modules>
11       <module>T-A</module>
12       <module>T-B</module>
13   </modules>
14   
15 
16 </project>

上述 POM 为 T-aggregator 的 POM 文件,该 POM 文件和其他两个模块的版本、groupId 一致,Maven 并没有强制要求它们一致,最好的做法是使它们保持一致。且模块所处的目录名称也应该与 artifactId 一致,这是为了方便快速定位内容,Maven 同样没有强制要求。

 <module> :值是一个当前 POM 的相对目录。

 <packaging> :对于聚合模块来说,其打包方式的值必须为 pom,否则无法构建。

为了方便用户构建项目,通常将聚合模块放在项目目录的顶层,其他模块则作为聚合模块的子目录存在,这样当用户得到源码的时候,第一眼发现的就是聚合模块的 POM,不用从多个模块中去寻找聚合模块来构建整个项目。

聚合模块仅仅是帮助聚合其他模块构建的工具,它本身并无实质内容,所以这里 T-aggregator 内容仅仅是一个 pom.xml 文件。

如果使用平行目录结构,聚合模块的 POM 也需要做相应的修改。

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3   <modelVersion>4.0.0</modelVersion>
 4 
 5   <groupId>org.wzh.maven</groupId>
 6   <artifactId>T-aggregator</artifactId>
 7   <version>0.0.1-SNAPSHOT</version>
 8   <packaging>pom</packaging>
 9   <name>T-aggregator</name>
10   <modules>
11       <module>../T-A</module>
12       <module>../T-B</module>
13   </modules>
14   
15 
16 </project>

Maven 会首先解析聚合模块的 POM、分析要构建的模块、并计算出一个反应堆构建顺序(Reactor Build Order),然后根据这个顺序依次构建各个模块。反应堆是所有模块组成的一个构建结构。

构建的最终输出显示的是各模块的名称,而不是 artifactId,所以在 POM 中需配置合理的  <name> 值,其目的是让 Maven 的构建输出更清晰。

原文地址:https://www.cnblogs.com/microcat/p/7239159.html