2013-03-20 114 views
11

我也遇到过下面的“模式” Maven的父子关系: Relation ship examplehttp://yuml.me/3f8dd366Maven的亲子关系

在这个例子中,我们有2个模块的模块。该模块有一个父POM“构建模块的父”,它知道这两个子模块是子模块。

子模块怎么也不知道这个父母知道他们,他们认为他们的父母是一个名为“Parent for dependency management”的父母。其中有像依赖管理,插件配置,共同财产等常见配置

我的问题:
这是一个“好”的格局?这意味着它有优点/缺点,因为看起来更直观的模式儿童< - >父母关系

+0

你在哪里找到这种模式?我很好奇在我的团队中讨论这种方法。其实,我认为建设的父母有点奇怪,我认为每个模块都应该知道如何建立自己,项目建设应该是每个单元建设的组成部分,但是要与更多的专家交流并阅读源代码这种做法可能会改变我的想法! – ThanksForAllTheFish 2013-03-20 11:16:08

+0

那些箭似乎很混乱(方向),我不认为你一直在使用“父母”。事实上我知道,因为Maven不支持多重继承。请清楚你的意思是“父母”。 – djechlin 2013-03-20 12:20:42

+0

@mardavi我们有它在我们公司 – RonK 2013-03-20 12:41:36

回答

9

一看有趣的事情是聚合POM。

这是一个团队项目模块,没有“亲子关系”。聚合器pom没有依赖关系管理。它只管理构建。

拥有父(p)和聚合器pom都是maven的强大功能。

你可以找到更多的信息here

This maven page对于如何为复杂项目设置pom也有很有价值的见解。

+0

在我们的团队中,我们设立了这样的团队。解耦父POM和聚合器POM可防止每次在构建生命周期中添加新模块时更新每个模块的父POM。在我们的案例中,聚合器POM只是通过配置多模块项目而不是每个子模块来轻松设置构建(在Jenkins中)。 – YMomb 2013-03-20 12:28:15

+0

谢谢您的澄清,阅读完这些网页后我意识到我的术语不正确 – RonK 2013-03-20 12:37:05

+0

没问题。我认为父母和聚合者之间的混淆很普遍。有些人在使用聚合器时倾向于使用父母。 – phoenix7360 2013-03-20 12:49:19

0

这实际上是一个公司范围的配置pom其实不错,它包含的东西,如属性,dependecyManagement ,仓库,pluginManagement等,这些他们都将继承

也许这可以帮助你:Company wide parent pom

5

哼哼...我想我不同意你图片上的条款。这里是我看到这一点:

enter image description here

组织模块,这样可能会造成混淆了很多developpers的,但它是一个做事的合法途径。

无论如何,我不推荐这种方法,因为它很混乱。但有时候,他们没有其他选择。

使用此配置时?

一个(或多个)的子模块已经有父(即是在另一个项目中开发的,但你需要重建它)。请注意,在多模块项目<module>项是相对路径,所以你可以有这样的:

<modules> 
    <module>../../somedir/othermodule</module> 
    ... 
</modules> 

如果可能的话,我建议使用多模块还为母体因为:

  • 不易混淆
  • 清洁和可读<modules><parent>部分(没有必要使用难看相对路径来指定子模块
  • 你可以组织你的模块在一个干净的层次结构SCM下(让行家释放小插件会很高兴)(我知道,日食不喜欢层次的项目,但这是另一个问题)
+0

谢谢,我的名词确实是错误的。您能否详细说明何时使用这种配置?另外,您是否建议将多模块项目设置为模块的父项? – RonK 2013-03-20 12:34:06