【问题标题】:Determine source of transitive dependency确定传递依赖的来源
【发布时间】:2022-01-22 14:54:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: gradle


    【解决方案1】:

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

    > gradle dependencies
    

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

    > gradle dependencies --configuration compile
    

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

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

    > gradle dependencyInsight --dependency logback --configuration compile
    

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

    configurations.all*.exclude module: "logback-classic"
    

    【讨论】:

      【解决方案2】:

      更新的答案:

      我用这段代码解决了 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 应用程序)。这个解决方案出奇地难以追踪,但在许多情况下可能非常有用。

      这是handling conflicting candidates 上的 gradle 文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 2017-01-15
        • 2020-06-24
        • 2018-07-06
        • 2016-11-30
        • 2013-06-22
        相关资源
        最近更新 更多