Java 是否有任何理由在Maven中为我自己的可传递依赖项保留显式依赖项声明?
我已经阅读了一段关于Maven中显式与传递(隐式)依赖关系声明的文章。大多数人倾向于同意,您应该始终明确声明项目所依赖的库,主要是为了避免版本不匹配 这是完全合理的,但是我们应该如何处理我们的内部依赖关系呢?我认为绝对没有理由保持模块之间的显式依赖关系,如果它们可以通过传递机制解决的话 我的用例场景:Java 是否有任何理由在Maven中为我自己的可传递依赖项保留显式依赖项声明?,java,maven,dependencies,Java,Maven,Dependencies,我已经阅读了一段关于Maven中显式与传递(隐式)依赖关系声明的文章。大多数人倾向于同意,您应该始终明确声明项目所依赖的库,主要是为了避免版本不匹配 这是完全合理的,但是我们应该如何处理我们的内部依赖关系呢?我认为绝对没有理由保持模块之间的显式依赖关系,如果它们可以通过传递机制解决的话 我的用例场景: 我的团队在major.minor.micro发布周期中开发软件,例如:1.1.1、1.1.2、1.3.0等 在每个版本中,我们增加了项目中所有模块的版本控制方案(因此A:1.0,B:1.0变成了
- 我的团队在
发布周期中开发软件,例如:1.1.1、1.1.2、1.3.0等major.minor.micro
- 在每个版本中,我们增加了项目中所有模块的版本控制方案(因此A:1.0,B:1.0变成了A:1.1,B:1.1)
- 我们使用的是反应堆项目,嵌套深度达两层
core
和logic
的pom.xml中将xmlhelper:1.1
声明为依赖项?当我使用util
模块时,该依赖关系将被自动解析(可传递)
如果我声明它,我会得到一个更大的pom来维护
如果我跳过它,当依赖关系随着时间的推移而演变时,我可能会遇到麻烦。这里有几个问题,所以我将尝试全部回答 这是完全合理的,但我们应该如何处理我们的内部问题呢 依赖关系 看起来您有一个基于模块的项目。为了缓解版本冲突,我建议使用以下两种可能性之一:
dependencyManagement
部分,并使用属性
版本李>
依赖关系管理
部分dependencyManagement
,而不是在每个pom中使用声明
我希望这有帮助 你能给出一个pom文件场景的例子吗,或者可能是在github上创建一个示例项目或类似的东西。我在描述中添加了一个非常基本的示例。我忘了添加我们当然使用父pom中的依赖项管理部分:-)问题纯粹是关于声明可传递的依赖项。现在我想起来了,还有一点是反对的。如果像
core
这样的顶级模块只使用了xml helper
中的一种实用方法,并且该方法在某个时候从项目中删除了,那么在POM中,模块之间仍然有很强的依赖性,不再有任何共同之处。这使得管理更加困难,只能通过依赖关系:分析目标来获得。@ukaszBachman如果上面的答案有用,请接受它,或者启动bounty以注意接收更多答案。
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