使用摇篮1.0里程碑8摇篮 - 排除配置的依赖,但没有为继承配置
我的项目使用SLF4J +的logback日志记录,所以我想,以防止任何log4j的传递DEPS从我的污染类路径。因此,我添加了一个全球性的排斥,就像这样:
configurations {
all*.exclude group: "log4j", module: "log4j"
}
不过,我使用的这对log4j的运行时相关性的测试库(hadoop-minicluster
),所以现在我需要让我的测试运行时log4j的依赖。我试了log4j的增加的直接依赖:
testRuntime group: "log4j", name: "log4j", version: "1.2.15"
和编辑我排除代码(一个黑客位的):
configurations.findAll {!it.name.endsWith('testRuntime')}.each { conf ->
conf.exclude group: "log4j", module: "log4j"
}
但是,这是行不通的。将排除添加到testCompile conf中会自动将其添加到所有继承配置中,包括testRuntime。而且这种排除似乎也会覆盖我所添加的显式依赖。
看来,这是Gradle的预期行为。从the docs:
如果你定义一个排除特定配置,排除传递依赖将解决这一配置或任何继承配置时被过滤了所有的依赖。
那么还有什么其他方式可以做我想做的事吗?
思路:
- 创建一个新的conf
myTestRuntime
不从testCompile延伸,并使用了我的测试类路径。- 但是,我必须复制testCompile和myTestRuntime的所有依赖关系。
- 删除配置级别排除。对于除testRuntime以外的所有confs,循环依赖并手动删除log4j(或在log4j上添加dep级别的排除)。
- 这是可能的吗? Configuration.allDependencies是只读的。
难道你不做你的全局排除,然后添加'log4j-over-slf4j.jar'? http://www.slf4j.org/legacy.html – Snekse 2015-03-26 22:53:59
@Snekse也可以。好主意 – 2016-03-16 22:21:58