多模块项目是那些包含一系列待构建模块的项目。一个多模块项目的打包类型总是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信息的项目混淆。