如何在传递依赖中排除传递依赖?
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 传递依赖排除未按预期工作。 (我如何摆脱 com.google.guava:guava-jdk5:13.0 ?)