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

Dealing with other dependencies in your own Maven dependency

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

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

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

为您的依赖项设置依赖项是完全合理的(这些称为传递性 依赖项)。当然,数量越少越好,但另一方面,又不想重新发明轮子。

当有人使用你的依赖时,他们会自动绘制对spring的传递依赖。现在,可能会出现几种情况:

  • 如果这是对 spring 的唯一引用,则将按照您声明的方式使用该版本。
  • 如果在其他时候,给出了不同版本的 spring,Maven 依赖调解就会启动。它根据 "nearest is best" 规则决定采用哪个版本。
  • 但是:您始终可以在 <dependencyManagement> 中设置 spring 版本,然后覆盖所有传递给定的版本号。

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

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

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