Gradle 从依赖子项目中排除组

Gradle exclude group from dependant subproject

给定一个 gradle 项目 A 依赖于项目 B(没有共同的父级)

compile project('B'){
    exclude group: 'org.slf4j'
}

我们如何从我们依赖的项目中排除传递依赖组?(这段脚本将失败,因为没有 exclude for compile projet(..))

和更一般的问题:是否有一种优雅的方法可以将特定组从所有依赖项中排除,除非它是第一级依赖项?

例如,我们可能有一堆库,每个库都可以声明其日志记录环境,但是通过排除 slf4j 的所有已知组、其实现并声明特定版本,我们将确保我们不会有任何版本冲突,将在模块级别控制版本。

这是 Gradle 文档中的一个示例,说明如何在项目级别排除传递依赖(我想这就是你所说的 "except if its a first level dependency" 的意思):

configurations {
    compile.exclude module: 'commons'
    all*.exclude group: 'org.gradle.test.excludes', module: 'reports'
}

参见 52.4.7。排除传递依赖 here

您可以直接使用所需版本指定依赖项,也可以使用强制版本resolution strategy