在 maven pom.xml 中更改传递依赖项的版本

Posted

技术标签:

【中文标题】在 maven pom.xml 中更改传递依赖项的版本【英文标题】:Changing the version of a transitive dependency in maven pom.xml 【发布时间】:2020-12-13 09:45:14 【问题描述】:

我一直在尝试在我的一个项目中覆盖传递依赖版本。我在 github 上找到了以下示例项目进行实验(https://github.com/Richou/swagger-codegen-maven-plugin)。该项目的父 pom 包含对 swagger-codegen 的依赖项。 Swagger-codegen 又具有一个名为 slf4j-ext 的依赖项,其版本为 1.6.3。我想从父 pom 升级/覆盖 slf4j-ext 的版本到 1.7.30。我尝试在父 pom 的属性标记中添加所需的 slf4j-version,但是当我检查 maven 依赖树时它不起作用。正确的做法是什么?

        <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-codegen</artifactId>
        <version>2.1.2</version>
    </dependency>
</dependencies>

<properties>
    <slf4j-version>1.7.30</slf4j-version>
    <java.version>1.7</java.version>
</properties>

【问题讨论】:

是否有任何原因导致属性覆盖不起作用? 【参考方案1】:

您可以在父 pom 的 dependencyManagement 部分中添加具有所需版本的 slf4j-ext。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-ext</artifactId>
      <version>$slf4j-version</version>
    </dependency>
  </dependencies>
</dependencyManagement>

【讨论】:

“有时可能还不够”是什么意思? &lt;dependencyManagement&gt; 覆盖传递依赖。 你说得对,我编辑了我的答案以删除这部分。 有效,但谁能告诉我为什么在父 pom 中覆盖 中的版本不起作用?我想更好地了解 pom 的工作原理。 因为您在 pom 中定义的属性不适用于您的依赖项,它仅适用于您的 pom 和子模块。换句话说,不可能覆盖依赖项中定义的属性。

以上是关于在 maven pom.xml 中更改传递依赖项的版本的主要内容,如果未能解决你的问题,请参考以下文章

如何查看 Maven pom.xml 文件的传递依赖项?

Maven 多依赖处理

具有 maven 依赖项的 Java ClassNotFoundException

在 Maven 2 中,我如何知道传递依赖来自哪个依赖?

物理更改 Maven pom.xml <properties> 值

pom.xml详解