本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:Maven父POM与子模块的POM
在一个多项目构建中,似乎有几种构造父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/
最后,还有一个选项,将其中模块级别和父级分开,如下所示:
myproject/
mypoject-parent/
pom.xml
myproject-core/
myproject-api/
myproject-app/
pom.xml
父pom包含任何“共享”配置(dependencyManagement,属性等),而myproject / pom.xml包含模块列表。
一些额外的问题:
在哪里可以在源代码管理,部署目录,通用插件等中定义各种共享配置的最佳位置。(我假设是父级,但我经常对此感到苦恼,它们最终出现在每个项目中,而不是最终出现在一个通用的位置)。
Maven-release插件,Hudson和Nexus如何处理您如何设置多项目(可能是一个巨大的问题,当有人进行多项目构建时,这可能是一个巨大的问题)?
ps:每个子项目都有自己的pom.xml,我将其省略以保持简洁。
回答:
1, 独立的父级是跨未耦合组件共享配置和选项的最佳实践。 Apache有一个父pom项目,可以共享法律声明和一些常见的打包选项。
2, 如果顶级项目中有实际工作,例如聚合javadoc或打包发行版,那么在完成该工作所需的设置与要通过父项共享的设置之间将存在冲突。 只有一个父pom的项目可以避免这种情况。
2,一种常见的模式是让带有代码的项目使用父项目作为其父项目,并使这个父项目使用顶级项目作为他的父项目(也就是含代码项目的”爷爷项目“)。 这使核心事物可以被所有人共享,但是避免了#2中描述的问题。