# Maven 多模块(聚合)

  • Maven 继承(父子工程)的目的为了配置文件的复用和配置信息的统一管理;

  • Maven 聚合(多模块工程)目的是项目功能上的拆分;

  • Maven 聚合(多模块工程)功能通常会和继承功能一起使用。这样,多模块工程看起来就像是父子工程的升级版。

  • Maven 聚合功能也可以脱离继承单独使用。

例如,在 log4j1 时代,log4j 项目的『产出』只有一个 log4j.jar 包。到了 log4j2 时代,log4j 项目的『产出』就变成了两个包:log4j-apilog4j-core

很明显,就是两部分相对独立的代码分别打成了两个包,而并不像以前那样打成一个包。

由于 Maven 多模块项目是父子项目的一种高级形式,因此,多模块项目也是有一个父模块包含一个或多个子模块,不过有几点不同:

  1. 多模块项目中,子项目通常是在父项目『里面』的。

  2. 多模块项目中,父项目中会『多出来』一个 <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>