46

我有一个项目,我在其中使用 sl4j 和 log4j。我最近在我的项目中添加了一些新依赖项,其中一个我添加的新依赖项包括对 logback-classic 的传递依赖项,其中包括另一个 sj4j 绑定。

我想摆脱 logback,但我不知道我的哪些直接依赖项添加了传递依赖项,以便我可以排除它。

在 Maven 中,我知道如何获取整个依赖关系图以确定传递依赖关系的来源,但我不知道如何使用 gradle 来执行此操作。

有谁知道如何使用 gradle 获取传递依赖的源依赖?

4

2 回答 2

59

要显示每个类路径的整个依赖关系树,请使用:

> gradle dependencies

如果您只对特定的类路径感兴趣,请使用(比如说):

> gradle dependencies --configuration compile

使用该-p选项在子项目上运行。

要显示谁将特定依赖项拉入特定类路径,以及如何解决任何版本冲突,请使用(例如):

> gradle dependencyInsight --dependency logback --configuration compile

请注意,您还可以从整个类路径(或多个)中排除依赖项。通常这比排除特定的传递依赖更可靠。例如:

configurations.all*.exclude module: "logback-classic"
于 2013-07-15T17:28:19.260 回答
0

更新的答案:

我使用这段代码来解决 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 文档。

于 2021-06-17T14:12:08.600 回答