【问题标题】:Overriding transitive version dependency in maven覆盖maven中的传递版本依赖
【发布时间】:2020-12-13 17:10:26
【问题描述】:

在maven中使用<properties></properties标签覆盖传递依赖需要满足哪些条件?例如,在这个示例 github 项目 (https://github.com/Richou/swagger-codegen-maven-plugin) 中,我想通过在父 pom 中的 <properties> 标记内定义所需​​版本来覆盖 swagger-codegen 中使用的 slf4j-ext 版本。这样做的条件是什么?

注意:我知道<dependencyManagement> 可用于此目的,但我想更好地了解版本覆盖以及 pom 的工作原理。

【问题讨论】:

  • 我猜你不能覆盖传递依赖的属性,但我真的不确定。
  • 您只能通过将这些依赖项添加到项目中来覆盖项目的直接依赖项。这也可以通过直接向您的项目添加依赖项来实现。该决定取决于您的项目与依赖项之间的距离。

标签: java maven dependencies pom.xml dependency-management


【解决方案1】:

通常您需要通过标记到特定版本来定义传递依赖。

让我们说:

  1. 您希望的依赖项需要更新的传递依赖项。 在这种情况下,您遇到了新依赖项的问题。
  2. 您希望的依赖项需要一个较旧的传递依赖项 在这种情况下,您希望使用或根本不使用更新的依赖项
  3. 您需要升级依赖项本身的传递依赖项吗? 在这种情况下,排除依赖项并将其添加为您自己的依赖项

在第一种情况下,您可以使用此处解释的依赖排除 https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html#dependency-exclusions

在后一种情况下,您需要验证您的传递依赖是否有效,或者您是否还需要排除传递依赖。

升级

【讨论】:

  • 我不是在寻找依赖排除。我需要项目中的传递依赖项,但只需要升级该依赖项的版本而不更改基本依赖项的版本。我还需要<dependencyManagement> 以外的方法来执行此操作,因此我指定使用<properties>
  • 仍不完全清楚。您可以排除传递依赖项并将其添加为您自己的依赖项。在上面的答案中也添加了这个。
  • 让我给你更好的背景。我正在询问以下链接link 中给出的解决方法和修复中的选项 2。我在我的问题链接中给出的 github 项目中尝试了这个,但它没有用。我想知道为什么。
  • 我认为这可能会有所帮助。 andresalmiray.com/maven-dependencies-pop-quiz-results
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 2015-08-24
相关资源
最近更新 更多