在多项目构建中,有好几种结构父POM的方式,我想知道每种方式的优缺点。
最简单的方式是将父POM放在项目的根目录中,例如:
myproject/
myproject-core/
myproject-api/
myproject-app/
pom.xml
这里的 pom.xml 同时充当了父项目以及描述 -core,-api 和 -app 模块的角色。
下一种方法是将父项目分离到自己的子目录中,如下所示:
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
当父POM文件仍然包含模块信息但是它们采用相对路径时,例如../myproject-core
最后一种情况是模块定义和父POM分离,例如:
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
父POM包含了任何"共享"配置 (dependencyManagement、properties等),而 myproject/pom.xml 则包含了模块列表。目的是为了支持大型构建,因此应该能够扩展到大量项目和构件。一些额外的问题:
- 最好在哪里定义各种共享配置,例如源代码控制、部署目录、常用插件等 (我假设是父POM,但我经常会遇到问题,它们最终会出现在每个项目中,而非一个公共的地方)。 - Maven-release 插件、Hudson 和 Nexus 如何处理多项目的设置 (这可能是一个很大的问题,更多的是关于任何人是否被设置多项目构建所困扰)?
编辑:每个子项目都有自己的 pom.xml,我将其省略以保持简洁。