为和这两个项目一起运行,主项目创建在比 NumOps 和 OpsImp 的项目目录高一级的目录。
NumOps 和 OpsImp 项目都使用标准 Maven 项目目录布局。
在最顶部,项目目录只包含一个 pom.xml 文件。图 8 显示了新的子目录结构,紧跟在主目录之下:
可以在分发代码的 example2 子目录中找到这个多模块项目的代码(参见 下载)。清单 14 显示了顶层的 pom.xml 文件:
新代码以粗体突出显示。首先,这个主项目的工件 ID 是 mavenex2,其打包类型是 pom。这向 Maven 2 传递出这样的信号:这是一个多模块项目。
随后, 标记指定组成此项目的两个模块:NumOps 和 OpsImp。
这个主项目的子模块能从这个 pom.xml 文件中继承属性。说得更具体一点,这些子模块都不需要将 JUnit 声明为一个依赖项,即使它们都包含单元测试。这是因为它们继承了顶层定义的 JUnit 依赖项。
标记不指定此模块依赖的依赖项。相反,它主要由子模块使用。子模块能指定 标记中任何条目的依赖项,而无需指定具体的版本号。
当项目树更改依赖项的版本号时,这很有用,可以使需编辑的条目数目最小化。在本例中,OpsImp 项目的版本号是使用 ${project.version} 指定的。在执行 Maven 时,这是一个会被相应值所填充的参数。