微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。