问题描述
我有一个 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 (将#修改为@)