Использование Gradle 1.0, веха 8.
Мой проект использует slf4j+Logback для ведения журнала, поэтому я хочу, чтобы любые транзитивные зависимости от log4j не загрязняли мой путь к классам. Таким образом, я добавил глобальное исключение, например:
configurations {
all*.exclude group: "log4j", module: "log4j"
}
Однако я использую тестовую библиотеку ( hadoop-minicluster
), которая во время выполнения зависит от log4j, поэтому теперь мне нужно разрешить зависимость от 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 автоматически добавляет его и ко всем наследуемым конфигурациям, включая testRuntime. И кажется, что это исключение переопределяет даже явную зависимость, которую я добавил.
Похоже, что это ожидаемое поведение для Gradle. Из документов :
Если вы определяете исключение для конкретной конфигурации, исключенная транзитивная зависимость будет отфильтрована для всех зависимостей при разрешении этой конфигурации или любой наследуемой конфигурации .
Так есть ли другой способ сделать то, что я хочу достичь?
Идеи:
myTestRuntime
, которая не расширяется от testCompile, и используйте ее для моего тестового пути к классам.