【发布时间】:2013-01-17 21:29:57
【问题描述】:
我目前正在从事一个包含大约十几个子项目的项目。
每个子项目都包含一个单独构建依赖关系的 POM。
上游子项目包含下游子项目作为依赖项,就像您包含对 log4j 之类的依赖项一样:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
我们将这些依赖项保存在本地 Nexus 存储库中。
这似乎对我们有用。
然而,经过 11 个月的开发,我今天决定重新审视这十几个 POM 文件,并考虑到重构。
我随后发现了 <parent> 和 <module> 标签,并开始质疑我的 Maven 项目策略是否“正确”。
重构我的 POM 以将最上层的 POM(Web WAR 项目)更改为列出模块而不是上面的一系列依赖项的父 POM 会有什么好处?
我预计这十几个子项目中的大多数都会有自己的生命周期,这样它们就可以在公司的 Nexus 存储库中作为其他公司项目的代码库使用。
例如,是否使用多模块方法来分解和组织项目子组件的组合?还是会用一个模块来表示项目的整个组件?
【问题讨论】:
-
我认为约定是所有非叶子模块都应该使用抽象封装类型POM。我不知道你的策略是对还是错,但根据我的经验,这绝对不是惯例。
-
感谢您的建议@yorkw。我继续阅读这个主题,除了你的 cmets,我发现的关键是,在 Project Aggregation 的情况下,一个 Maven 模块指定一个依赖项作为它的父级。借用 UML 的一个术语,对于“组合”,这很好,但如果一个依赖项可以被许多“父母”使用/可以拥有自己的生命周期,也许是我现有的方法(使其成为一个独立的依赖项可用来自存储库)更“正确”。我希望“正确”的答案实际上是两者的结合!
-
只有一个问题:子项目应该发布同一个版本还是同一个时间点?
标签: maven pom.xml parent-pom