noo*_*osy 14 inheritance parent aggregation pom.xml maven
我有一个问题,关于如何使用继承和聚合的组合来重新构建一些单独的Maven项目.
设置场景:
这三个项目都有一些基本的依赖关系,比如log4j和junit.除此之外,web-app1和web-app2依赖于project-api,并且还在它们之间共享许多其他常见的依赖关系.
我一直在阅读https://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html,我只是想确认我理解最佳实践.
遗产:
我是否有必要创建一个组织级父POM,其中包括所有三个项目和一些环境设置以及总体项目信息共有的依赖关系(依赖关系管理).意图是所有Maven项目(不一定直接)继承自此POM.
我是否有必要创建另一个父POM,其中包含web-app1和web-app2共有的依赖关系(依赖关系管理),并且只有web-app1和web-app2继承自此POM.我认为这个POM(我们称之为web-app父POM)应该是组织级父POM的子POM.
聚合:
在聚合方面,我不想在一天结束时创建一个工件.相反,我想运行一个Maven构建命令(可能在组织POM级别)以此顺序构建三个项目:
这是否意味着组织父POM将声明模块:
Web应用程序父POM将声明模块:
请注意,Web-app父POM和组织父POM没有任何相关代码.我相信这是可以注意到的"事实上,在Maven世界中,一个项目根本不需要包含任何代码,只需要一个pom.xml." 取自http://maven.apache.org/pom.html.
最后,我如何确保我需要的构建顺序得到尊重?例如,构建组织父POM会导致构建project-api,并且这个最新的构建用于构建web-app1和web-app2?
我希望这不会太令人困惑,很高兴澄清是否需要更多信息.如果我完全错了,请随时告诉我!谢谢.
art*_*tol 12
你的方法是明智的.几点:
是环境设置和总体项目信息,不是依赖项.
项目应明确列出所有依赖项,而不是依赖继承它们(恕我直言).这意味着您必须多次声明您的记录器,但它会在以后节省您的痛苦.(当然,您可以使用单独的POM项目将相关的依赖项组合在一起,因此通常一起指定,例如链接中的hibernate示例).如果要集中依赖项的版本,可以dependencyManagement在父POM中放置一个部分,这意味着您仍然在子项目中声明依赖项,但版本来自父项,从而确保一致性.没有声明依赖关系的孩子根本不会结束它.
拥有webapp-parent是一个好主意,如果他们有重复的插件,配置等.如果他们共享代码,你可以添加另一个项目webapp-common,它是一个内置的jar,其他两个可以依赖.它的依赖关系将被传递,因此这是共同依赖关系的自然发生地.
webapp-parent不需要同时是父和聚合器,除非您需要经常同时构建webapp1和webapp2而不是project-api.您可以将所有项目作为整体父项的模块.您的目录结构可能如下所示
overall
project-api
webapp-parent
webapp1
webapp2
Run Code Online (Sandbox Code Playgroud)
或者如果你更喜欢你的原始建议,这也没关系
overall
project-api
webapp-parent
webapp1
webapp2
Run Code Online (Sandbox Code Playgroud)
随着时间的推移,密切关注项目布局更重要,并在适当的时候进行重构.
只要您声明依赖项,Maven就足够聪明,可以按正确的顺序构建模块.