文章目录
- Maven 多模块(聚合)
- 非父子关系的多模块项目
Maven 多模块(聚合)
Maven 继承和聚合是 2 个独立的概念。工程与工程之间可能毫无关系,也可能是继承关系,也可能是聚合关系,也可能既是继承又是聚合关系。继承和聚合可以同时出现,但并不是必须同时出现。
-
Maven 继承(父子工程)的目的为了配置文件的复用和配置信息的统一管理;
-
Maven 聚合(多模块工程)目的是项目功能上的拆分和批量执行 mvn 命令;
[!] 例如
在 log4j1 时代,log4j 项目的「产出成果」只有一个log4j.jar
包。到了 log4j2 时代,log4j 项目的「产出成果」就变成了两个包:log4j-api
和log4j-core
。很明显,就是两部分相对独立的代码分别打成了两个包,而并不像以前那样打成一个包。
由于 Maven 多模块项目是父子项目的一种高级形式,因此,多模块项目也是有一个父模块包含一个或多个子模块,不过有几点不同:
- 不同点 1:模块和模块的位置不同。
多模块项目中,子项目通常是在父项目「里面」的;而多模块项目中,普通项目和聚合项目通常是「平级」的。
- 不同点 2:pom.xml 中内容不同。
多模块项目中,父项目中会『多出来』一个 <modules> 元素。
<project ...><modelVersion>4.0.0</modelVersion><groupId>org.codehaus.mojo</groupId><artifactId>my-parent</artifactId><version>2.0</version><packaging>pom</packaging><modules><module>child1-module</module><module>child2-module</module><module>...</module><module>...</module><module>...</module></modules>...</project>
非父子关系的多模块项目
其实多模块项目可以不必是父子项目。
这种情况下:
-
原来的父项目中仍有 <modules> 元素,用来囊括子项目。
-
原来的子项目中不再有 <parent> 元素。或者 <parent> 元素指向另外的项目,不再是原来的父项目。
这样一来,这些项目和项目之间就「不再是父子」项目关系,因此,自然就不能继承配置了。
不过,另一个功能在这种情况下倒是保留下来了:批量执行 maven 命令 。