我有一个项目,我在其中使用 sl4j 和 log4j。我最近在我的项目中添加了一些新依赖项,其中一个我添加的新依赖项包括对 logback-classic 的传递依赖项,其中包括另一个 sj4j 绑定。
我想摆脱 logback,但我不知道我的哪些直接依赖项添加了传递依赖项,以便我可以排除它。
在 Maven 中,我知道如何获取整个依赖关系图以确定传递依赖关系的来源,但我不知道如何使用 gradle 来执行此操作。
有谁知道如何使用 gradle 获取传递依赖的源依赖?
我有一个项目,我在其中使用 sl4j 和 log4j。我最近在我的项目中添加了一些新依赖项,其中一个我添加的新依赖项包括对 logback-classic 的传递依赖项,其中包括另一个 sj4j 绑定。
我想摆脱 logback,但我不知道我的哪些直接依赖项添加了传递依赖项,以便我可以排除它。
在 Maven 中,我知道如何获取整个依赖关系图以确定传递依赖关系的来源,但我不知道如何使用 gradle 来执行此操作。
有谁知道如何使用 gradle 获取传递依赖的源依赖?
要显示每个类路径的整个依赖关系树,请使用:
> gradle dependencies
如果您只对特定的类路径感兴趣,请使用(比如说):
> gradle dependencies --configuration compile
使用该-p
选项在子项目上运行。
要显示谁将特定依赖项拉入特定类路径,以及如何解决任何版本冲突,请使用(例如):
> gradle dependencyInsight --dependency logback --configuration compile
请注意,您还可以从整个类路径(或多个)中排除依赖项。通常这比排除特定的传递依赖更可靠。例如:
configurations.all*.exclude module: "logback-classic"
更新的答案:
我使用这段代码来解决 logback 和 log4j 之间的依赖问题:
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module('org.apache.logging.log4j:log4j-slf4j-impl') using module ('ch.qos.logback:logback-classic:1.2.3')
}
}
此解决方案找到对 log4j-slf4j-impl 的任何依赖项,并指示它从 logback 中选择一个(这是一个 spring 应用程序)。这个解决方案令人惊讶地难以追踪,但在许多情况下可能非常有用。
这是关于处理冲突候选人的 gradle 文档。