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