【问题标题】:In Gradle, exclude transitive dependency from all dependencies except one在 Gradle 中,从除一个以外的所有依赖项中排除传递依赖项
【发布时间】:2023-04-02 13:15:01
【问题描述】:

我正在尝试使用 JUnit 和 SLF4J Test 测试记录器的行为,这是 “将日志消息存储在内存中并提供检索它们的方法的 SLF4J 的测试实现”

来自 SLF4J 测试文档:

SLF4J 测试应该是您测试中唯一的 SLF4J 实现 类路径

我有一些依赖项将 SLF4J 作为传递依赖项。我正在尝试从我的测试配置中的所有依赖项中排除 SLF4J,但我仍然需要它来进行 SLF4J 测试

我可以使用下面的代码从所有内容中排除 SLF4J,但这显然也将它从 SLF4J 测试中排除,我需要它。

configurations {
    testCompile.exclude group: "org.slf4j"
}

由于 SLF4J 是我的许多其他依赖项(包括 Spring Boot)的传递依赖项,因此从所有这些依赖项中单独排除它是不切实际的(或可能的?)。

有没有一种(相对轻松的)方法可以从所有依赖项中排除传递依赖项,但需要它的依赖项除外?

【问题讨论】:

    标签: gradle dependencies


    【解决方案1】:

    SLF4J 测试指南说您的测试类路径中应该只有一个 SLF4J 实现。这意味着您应该只在当前项目中添加slf4j-test 依赖并排除其他的(如logback、log4j 等)。

    例如Spring Boot默认使用Logback,这里是gradle脚本的sn-p描述如何使用slf4j-test

    configurations.testCompile {
        exclude group: 'ch.qos.logback', module: 'logback-classic'
    }
    
    dependencies {
        compile(group: 'org.springframework.boot', name: 'spring-boot-starter')
        ...
    
        testCompile(group: 'org.springframework.boot', name: 'spring-boot-starter-test')
        testCompile(group: 'com.github.valfirst', name: 'slf4j-test', version: '1.3.0')
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 2015-05-15
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2017-09-08
      • 1970-01-01
      相关资源
      最近更新 更多