我有一个 spring boot 项目(2.1.3),我必须在其中添加一个由我们的合作伙伴之一提供的 jar 文件(使用com.aesenc
group 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>
仅此一项也没有解决问题。但是通过将它移到com.aesenc
pom 文件中的上方,问题得到了解决。所以我对我对 Maven 中依赖解析是如何发生的理解感到困惑。
This didn't work:
My project +
|
+-aesenc-+
| |
| +commons-codec-v1.10
|
+commons-codec-v1.15
我的假设是,这就是依赖树的样子,只需将 v1.15 添加为依赖项就可以解决问题,而不管它在 pom.xml 中的顺序如何。
This worked:
My project +
|
+commons-codec-v1.15
|
+-aesenc-+
|
+commons-codec-v1.10
想知道我的假设哪里出错了。