我已经读过,从父/依赖项目(具有所有共享或公共依赖项的项目)中拆分聚合器项目(具有所有模块声明的项目)应该是个好主意。因此,父项目不是您用于完整构建的项目。
为什么?
答案 0 :(得分:2)
在大型环境中,您可能希望父母为项目类定义公共行为(例如,servlet父级,portlet父级,war父级等)。因为Maven中没有多重继承,所以您必须拥有一个包含所有这些内容的巨大父POM和一些复杂的配置文件约定,或者几个父项,每种类型的项目都有一个。
类似的项目不一定是一起构建的(实际上通常不是)。要为单个版本构建项目,您需要一个聚合器来定义要构建的相关模块。
Maven book中有一节描述了聚合和继承之间的区别。这可能有助于您理解。
答案 1 :(得分:-1)
聚合器项目通常以某种方式打包所有依赖项目(例如,作为J2EE EAR或WAR存档,或作为分发ZIP),这需要首先构建所有依赖项目 。
但是,必须在子项目之前构建父POM。
如果父项目也是聚合器,那么你有一个循环依赖:
聚合器依赖于子依赖关系,这取决于聚合器父级。
在我们的构建系统中,我们通过使用父POM文件来解决这个问题,该文件也会反映它的子项。其中一个子集是一个聚合器,它依赖于其他子节点并创建分发工件。 Maven依赖关系解析允许我们构建顶层pom,它以正确的顺序对所有子节点进行反应,最后使用聚合器项目。