Maven 对系统范围依赖的传递依赖

问题描述

我有一个 spring boot 项目 (2.1.3),我必须在其中添加一个由我们的合作伙伴之一提供的 jar 文件(用 com.aesenc 组 ID 引用)。我将它添加为系统范围的依赖项,尽管它违反了建议,因为这个 repo 已经有其他系统范围的依赖项(将来会解决这个问题)。由于合作伙伴提供的 jar (commons-codec) 中的传递依赖关系,这中断了其中一个 API 调用。 Spring boot 开始使用这个 commons-codec 而不是 spring bom 附带的那个。为了解决这个问题,我在系统范围的依赖项中添加了排除

<dependency>
   <groupId>aesenc.group</groupId>
   <artifactId>com.aesenc</artifactId>
   <version>1.0</version>
   <scope>system</scope>
   <exclusions>
      <exclusion>  <!-- declare the exclusion here -->
         <groupId>commons-codec</groupId>
         <artifactId>commons-codec</artifactId>
      </exclusion>
   </exclusions>
   <systemPath>${basedir}/src/main/resources/libs/AESEnc/AESEnc.jar</systemPath>
</dependency>

这并没有解决问题。因此,在浏览了 Maven 文档后,我在当前项目中添加commons-codec 更新版本作为依赖项,使其成为依赖关系图中的直接子项

<dependency>
   <groupId>commons-codec</groupId>
   <artifactId>commons-codec</artifactId>
   <version>1.15</version>
</dependency>

仅此一项也没有解决问题。但是通过将它移到 pom 文件中的 com.aesenc 上方,问题得到了解决。所以我对我对 Maven 中依赖解析是如何发生的理解感到困惑。

This didn't work:

My project +
           |
           +-aesenc-+
           |        |
           |        +commons-codec-v1.10
           |
           +commons-codec-v1.15

我的假设是依赖树就是这样,只要添加 v1.15 作为依赖就可以解决这个问题,而不管它在 pom 中的顺序如何。

This worked:

My project +
           |
           +commons-codec-v1.15
           |
           +-aesenc-+
                    |
                    +commons-codec-v1.10

想知道我的假设哪里出错了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)