【问题标题】:Maven parent-child relationshipMaven父子关系
【发布时间】:2013-03-20 10:48:33
【问题描述】:

我遇到过以下“pattern”的maven父子关系: http://yuml.me/3f8dd366

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

子模块根本不知道这个父级认识他们,他们认为他们的父级是名为“依赖管理的父级”的那个。其中有一些常见的配置,比如依赖管理、插件配置、常用属性等。

我的问题:
这是一个“好”的模式吗?意思是它有没有优点/缺点作为看似更直观的孩子父母关系的模式

【问题讨论】:

  • 你在哪里找到这个模式?我很想在我的团队中讨论这种方法。实际上,我觉得构建的父级有点奇怪,我认为每个模块都应该知道如何构建自己,项目构建应该是每个模块的构建的组成,但是与更多专家交谈并阅读源代码这种方法可能会改变我的想法!
  • 那些箭头看起来真的很混乱(方向),我不认为你一直在使用“父母”。事实上我知道,因为 Maven 不支持多重继承。请澄清您所说的“父母”是什么意思。
  • @mardavi 我们公司的许多项目都有它
  • @djechlin 正如我在下面的 cmets 中已经说过的,其中一个父母确实是一个聚合器
  • 当您使用 Bamboo 或 Jenkins 时,最好将构建 pom 与真正的父级分开。在我们公司,每个模块都有单独的构建配置,所以我们真的不希望父 pom 触发所有子构建。

标签: java maven


【解决方案1】:

一个有趣的事情是聚合器 pom。

这是一个按模块对项目进行分组的 pom,没有“父子”关系。聚合器 pom 没有依赖项管理。它只管理构建。

同时拥有父 pom 和聚合器 pom 是 maven 的一个非常强大的功能。

您可以找到更多信息here

This maven page 对如何为复杂项目设置 pom 也有宝贵的见解。

【讨论】:

  • 在我们的团队中,我们这样设置我们的 pom。例如,解耦父 POM 和聚合器 POM 可以防止每次在构建生命周期中添加新模块时都必须更新每个模块的父 pom。在我们的例子中,聚合器 POM 只是在这里通过配置多模块项目而不是每个子模块来轻松设置构建(在 Jenkins 中)。
  • 感谢您的澄清,阅读这些页面后,我意识到我的术语不正确
  • 没问题。我认为父 pom 和聚合器 pom 之间的混淆很常见。当应该使用聚合器时,有些人倾向于使用父 pom。
【解决方案2】:

嗯...我想我不同意你照片上的条款。这是我的看法:

这种组织模块的方式可能会让很多开发者感到困惑,但这是一种合法的做事方式。

无论如何,我不推荐这种方法,因为它令人困惑。但有时,他们也别无选择。

何时使用此配置?

一个(或多个)子模块已经有一个父模块(即在另一个项目中开发,但您需要重新构建它)。请注意,多模块项目中的 <module> 条目是相对路径,因此您可以使用以下内容:

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

如果可能,我建议将多模块也用作父模块,因为:

  • 不那么混乱
  • 干净且可读的&lt;modules&gt;&lt;parent&gt; 部分(无需使用丑陋的相对路径来指定父模块子模块
  • 您可以在 SCM 下以干净的层次结构组织模块(这样 maven-release-plugin 会很高兴)(我知道 eclipse 不喜欢分层项目,但这是另一个问题)

【讨论】:

  • 谢谢,我的用词确实有误。您能否详细说明何时使用这种配置?另外,您是否建议将多模块项目设置为模块的父级?
【解决方案3】:

拥有一个公司范围内的配置 pom 实际上很好,它不关心它的孩子,并且包含属性、dependecyManagement、存储库、pluginManagement 等所有东西都会继承的东西

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多