多模块项目是那些包含一系列待构建模块的项目。一个多模块项目的打包类型总是pom,很少生成一个构件。一个模块项目的存在只是为了将很多项目归类在一起,成为一个构建。Figure 9.3, “多模块项目关系”展示了一个项目层次,它包含了两个打包类型为pom的父项目,另外三个项目的打包类型是jar:
文件系统上的目录结构也反映了该模块关系。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
这些项目相互关联,因为在POM中top-group和sub-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-group的POM的时候,它会检查它的modules元素,看到top-group引用了项目sub-group和project-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信息的项目混淆。


