Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 2 拆分聚合器和父项目的好处是什么?_Maven 2 - Fatal编程技术网

Maven 2 拆分聚合器和父项目的好处是什么?

Maven 2 拆分聚合器和父项目的好处是什么?,maven-2,Maven 2,我已经读到,将聚合器项目(包含所有模块声明的项目)从父/依赖项项目(包含所有共享或公共依赖项的项目)中分离出来,这应该是一个好主意。因此,父项目不是您用来进行完整构建的项目 为什么会这样?聚合器项目通常会以某种方式打包所有依赖项目(例如,作为J2EE EAR或WAR归档,或作为分发压缩),这要求首先构建所有依赖项目 但是,必须在其子项目之前构建父POM 如果父项目也是聚合器,则存在循环依赖关系: 聚合器依赖于子依赖项,子依赖项依赖于聚合器父级 在我们的构建系统中,我们通过拥有一个父POM文件来解

我已经读到,将聚合器项目(包含所有模块声明的项目)从父/依赖项项目(包含所有共享或公共依赖项的项目)中分离出来,这应该是一个好主意。因此,父项目不是您用来进行完整构建的项目


为什么会这样?

聚合器项目通常会以某种方式打包所有依赖项目(例如,作为J2EE EAR或WAR归档,或作为分发压缩),这要求首先构建所有依赖项目

但是,必须在其子项目之前构建父POM

如果父项目也是聚合器,则存在循环依赖关系:

聚合器依赖于子依赖项,子依赖项依赖于聚合器父级


在我们的构建系统中,我们通过拥有一个父POM文件来解决这个问题,这个父POM文件也是它的子文件的反应器。其中一个子项是聚合器,它依赖于其他子项并创建分发工件。Maven依赖项解析允许我们构建顶级pom,它以正确的顺序对所有子项进行反应,聚合器项目位于最后。

在大型环境中,您可能希望有定义项目类常见行为的父项(例如servlet父项、portlet父项、war父项等)。因为Maven中没有多重继承,所以您要么拥有一个巨大的父POM,其中包含所有这些内容和一些复杂的概要约定,要么拥有多个父POM,每种类型的项目一个父POM

类似的项目不一定是一起构建的(事实上通常不是这样)。因此,要为单个版本构建项目,您需要一个定义要构建的相关模块的聚合器


中有一节描述了聚合和继承之间的区别。这可能有助于您的理解。

您能将链接发布到您阅读此文章的地方吗?我似乎再也找不到了。正如我所记得的,这只是JIRA问题,该项目的开发人员将其父项目(也声明了模块)拆分,因此一个项目只有模块,父项目只有依赖项。给出的理由是为了使多模块配置更容易或更容易。抱歉,我不能说得更具体了,我只是想知道。聚合器声明模块是完全有效的,这与引入依赖项不同,也不引入循环。有几个项目正是这样做的(例如)。您将只引入聚合器/父级声明子级依赖关系的循环。