如何在传递依赖中排除传递依赖?

Posted

技术标签:

【中文标题】如何在传递依赖中排除传递依赖?【英文标题】:How to exclude a transitive dependency inside a transitive dependency? 【发布时间】:2021-07-26 12:57:34 【问题描述】:
I have a maven project "Project-1". This project uses some dependencies, let's consider jackson databind 2.9.8

Another maven project "Project-2" uses "Project-1" as a dependency.

"Project-3" uses "Project-2" as a dependency.

在“Project-3”中,我使用了使用依赖管理标签的jackson databind 2.10.0。另外,在“Project-1”的pom中“Project-2”的依赖标签下,我添加了jackson databind的exclusion标签。

在“Project-3”的依赖树中,只有一个版本的杰克逊数据绑定得到解决,即 2.10.0

但是,在管道中的安全扫描中,它仍然报告杰克逊数据绑定 2.9.8 的一些安全问题

我不确定这个版本是如何得到解决的,即使它没有在依赖关系树中提及。

我现在正在尝试在“Project-1”中添加排除项。但是,有没有更好的方法在“Project-3”中排除它?

【问题讨论】:

看看mvn dependency:list,看看它是否还在。 它也没有显示在依赖项列表中。但是,我又扫了一遍。它在扫描中。 那么,扫描仪扫描什么?项目依赖,maven插件依赖?也许扫描器还会扫描排除的依赖项? 扫描器扫描 maven 构建的最终 jar。尽管依赖列表没有显示旧版本,但 maven 也以某种方式打包了旧 jar。这就是为什么我试图在 pom 中排除它 那么,它出现在 maven 日志中的什么位置? 【参考方案1】:

似乎依赖“jackson databind”不是由 Maven 拉取的,所以他们无法在 Maven 中排除它。

它可能是您运行的 Maven 插件的依赖项,您可以尝试通过运行带有调试标志 -X 的 Maven 来找出它。那么您可能需要删除该插件。

您的“扫描器”可能不仅扫描项目的依赖关系,还扫描其他东西。也许这是扫描仪中的一个错误,因此排除的工件也会被扫描。

【讨论】:

以上是关于如何在传递依赖中排除传递依赖?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gradle 时如何排除传递依赖项的所有实例?

Gradle 传递依赖排除未按预期工作。 (我如何摆脱 com.google.guava:guava-jdk5:13.0 ?)

排除单个依赖项的所有传递依赖项

Maven依赖传递依赖传递排除依赖冲突

Gradle - 排除嵌套的传递依赖

maven-排除传递依赖-exclusions