【发布时间】:2014-01-15 00:55:20
【问题描述】:
我已经阅读了一段时间关于 Maven 中的显式与传递(隐式)依赖声明。大多数人倾向于同意您应该始终明确声明您的项目所依赖的库,主要是为了避免版本不匹配。
这是完全合理的,但是我们应该如何处理我们的内部依赖关系?如果可以通过传递机制解决它们,我认为绝对没有理由保持模块之间的显式依赖关系。
我的用例场景:
- 我的团队以
major.minor.micro发布周期开发软件,例如:1.1.1、1.1.2、1.3.0 等... - 在每个版本中,我们都会增加项目中所有模块的版本控制方案(因此 A:1.0、B:1.0 变为 A:1.1、B:1.1)
- 我们正在使用 reactor 项目,嵌套深度为两层
我的直觉告诉我——摆脱依赖意大利面。有人会证明我错了吗?反应堆(依赖)图非常受欢迎:-)
一个例子:
我的父项目使用以下模块(省略外部依赖):
Project:1.1
- core:1.1
- +-- util:1.1
- +-- xml-helper:1.1
- logic:1.1
- +-- util:1.1
- +-- xml-helper:1.1
- gui:1.1
问题是:我应该将xml-helper:1.1 声明为core 和logic 的pom.xml 中的依赖项吗?当我使用util 模块时,该依赖关系将被自动解析(传递)。
如果我声明它,我会得到一个更大的 pom 来维护。
如果我跳过它,当依赖关系随着时间的推移而演变时,我可能会遇到麻烦。
【问题讨论】:
-
您能否举一个带有 pom 文件的场景示例,或者可以在 github 或类似的东西上创建示例项目。
-
我在描述中添加了一个非常基本的示例。
标签: java maven dependencies