在您自己的Maven依赖项中处理其他依赖项

时间:2019-09-30 17:08:14

标签: maven dependencies maven-3 dependency-management

我想为我的未来项目重用和集中为Spring REST API创建的utils。这就是为什么我认为我会将它们外包给我自己的项目,并使它们作为Maven依赖项提供。

这些Util文件,例如在基本服务中,基本控制器还包含Spring注释,即在我的Util依赖项中需要一些Spring依赖项。现在我不确定自己是否犯错。

首先,我不确定是否应该在实用程序依赖项中使用spring依赖项或尝试删除所有内容。否则,我将必须指定一个春季版本,但是它可能与以后要在其中包含的项目中使用的版本有所不同。我应该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

完全依赖于您的依赖项(这些被称为 transitive 依赖项)。当然,您应该将数字保持尽可能低,但是另一方面,您不想重新发明轮子。

当某人使用您的依赖项时,他们会自动在spring上绘制可传递的依赖项。现在,可能会发生几种情况:

  • 如果这是对spring的唯一引用,则按照您所说的使用该版本。
  • 如果在其他时候给出了不同版本的spring,则开始进行Maven依赖关系调解。它由“最近最佳”规则决定采用哪个版本。
  • 但是:您始终可以在<dependencyManagement>中设置春季版本,然后覆盖所有传递给定的版本号。

答案 1 :(得分:1)

这是Maven的主要概念。您的实用程序模块必须与Spring依赖项一起提供。它称为transitive dependencies。 试想一下所有依赖项都被排除在外的情况。在那种情况下,没人会永远不知道需要哪种类型的Spring依赖项。

Maven具有非常好的依赖冲突解决方案。它基于最新的原则。因此,您可以轻松覆盖这些Spring版本,并且您的应用程序将仅使用其中一个。

看看这些:
[1] Dependency Mechanism
[2] Dependency Mediation and Conflict Resolution

相关问题