【问题标题】:Maven Modules vs Stand Alone Maven POMs as dependenciesMaven 模块与独立 Maven POM 作为依赖项
【发布时间】:2013-01-17 21:29:57
【问题描述】:

我目前正在从事一个包含大约十几个子项目的项目。

每个子项目都包含一个单独构建依赖关系的 POM。

上游子项目包含下游子项目作为依赖项,就像您包含对 log4j 之类的依赖项一样:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>

我们将这些依赖项保存在本地 Nexus 存储库中。

这似乎对我们有用。

然而,经过 11 个月的开发,我今天决定重新审视这十几个 POM 文件,并考虑到重构。

我随后发现了 &lt;parent&gt;&lt;module&gt; 标签,并开始质疑我的 Maven 项目策略是否“正确”。

重构我的 POM 以将最上层的 POM(Web WAR 项目)更改为列出模块而不是上面的一系列依赖项的父 POM 会有什么好处?

我预计这十几个子项目中的大多数都会有自己的生命周期,这样它们就可以在公司的 Nexus 存储库中作为其他公司项目的代码库使用。

例如,是否使用多模块方法来分解和组织项目子组件的组合?还是会用一个模块来表示项目的整个组件?

【问题讨论】:

  • 我认为约定是所有非叶子模块都应该使用抽象封装类型POM。我不知道你的策略是对还是错,但根据我的经验,这绝对不是惯例。
  • 感谢您的建议@yorkw。我继续阅读这个主题,除了你的 cmets,我发现的关键是,在 Project Aggregation 的情况下,一个 Maven 模块指定一个依赖项作为它的父级。借用 UML 的一个术语,对于“组合”,这很好,但如果一个依赖项可以被许多“父母”使用/可以拥有自己的生命周期,也许是我现有的方法(使其成为一个独立的依赖项可用来自存储库)更“正确”。我希望“正确”的答案实际上是两者的结合!
  • 只有一个问题:子项目应该发布同一个版本还是同一个时间点?

标签: maven pom.xml parent-pom


【解决方案1】:

到目前为止,感谢大家的意见 - 我意识到这个问题是主观的。

在我看来,这个问题的“正确”答案似乎取决于另一个问题:每个子项目是否都有自己的生命周期?

我想我们可以使用 UML 类聚合和组合作为隐喻。如果子项目(从@yorkw 借用一个术语的叶节点)不能单独存在或在父项目范围之外有自己的生命周期(是 WAR、EAR 等),那么恕我直言该结构将保证在父 POM 中使用模块。

否则,由于该项目可以独立存在,我会说(再次恕我直言)该结构将保证将该项目作为对其父项的依赖项包含在内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2011-07-31
    • 2017-02-23
    • 2022-12-06
    • 1970-01-01
    • 2023-02-14
    • 2023-04-07
    • 2010-12-31
    相关资源
    最近更新 更多