9.5.2. 多模块项目

多模块项目是那些包含一系列待构建模块的项目。一个多模块项目的打包类型总是pom,很少生成一个构件。一个模块项目的存在只是为了将很多项目归类在一起,成为一个构建。Figure 9.3, “多模块项目关系”展示了一个项目层次,它包含了两个打包类型为pom的父项目,另外三个项目的打包类型是jar

多模块项目关系

Figure 9.3. 多模块项目关系


文件系统上的目录结构也反映了该模块关系。Figure 9.3, “多模块项目关系”中的一组项目拥有如下的目录结构:

top-group/pom.xml
top-group/sub-group/pom.xml
top-group/sub-group/project-a/pom.xml
top-group/sub-group/project-b/pom.xml
top-group/project-c/pom.xml

这些项目相互关联,因为在POMtop-groupsub-group引用了子模块。例如,项目org.sonatype.mavenbook:top-group是一个打包类型为pom的多模块项目。该项目的pom.xml包含如下的modules元素:

Example 9.10. top-group的modules元素

<project>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>top-group</artifactId>
  ...
  <modules>
    <module>sub-group</module>
    <module>project-c</module>
  </modules>
  ...
</project>

当Maven读取top-groupPOM的时候,它会检查它的modules元素,看到top-group引用了项目sub-groupproject-c。之后Maven会在它们的每个子目录中寻找pom.xml。Maven为每一个子模块重复这个过程:它会读取sub-group/pom.xml然后看到sub-group项目通过如下的modules元素引用了两个项目。

Example 9.11. sub-group的modules元素

<project>
  ...
  <modules>
    <module>project-a</module>
    <module>project-b</module>
  </modules>
  ...
</project>

注意我们称多模块项目下的项目为“模块”而不是“子项目”。这是有目的的,是为了而不将由多模块项目归类的项目与那些从其它项目继承POM信息的项目混淆。