【问题标题】:Dealing with other dependencies in your own Maven dependency处理您自己的 Maven 依赖项中的其他依赖项
【发布时间】:2023-03-13 07:12:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: maven dependencies maven-3 dependency-management


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      对你的依赖有依赖是完全合理的(这些被称为传递依赖)。当然,你应该尽量减少这个数字,但另一方面,你又不想重新发明轮子。

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

      • 如果这是对 spring 的唯一引用,则按照您的说明使用该版本。
      • 如果在其他时候,给出了不同版本的 spring,Maven 依赖中介就会启动。它通过“最近最好”的规则来决定采用哪个版本。
      • 但是:您始终可以在 <dependencyManagement> 中设置 spring 版本,然后覆盖所有传递给定的版本号。

      【讨论】:

      • 非常感谢您的精彩回答! =)
      猜你喜欢
      • 2014-07-01
      • 1970-01-01
      • 2016-01-13
      • 2013-06-22
      • 2020-03-20
      • 1970-01-01
      • 2012-03-12
      • 2013-04-17
      • 2020-08-17
      相关资源
      最近更新 更多