Usando Gradle 1,0 hito 8.Gradle - excluir una dependencia de una configuración, pero no para una configuración de heredar
Mi proyecto utiliza slf4j + Logback para el registro, por lo que quiero evitar cualquier deps transitivos en log4j de contaminar mi classpath. Por lo tanto, he añadido una exclusión global, de este modo:
configurations {
all*.exclude group: "log4j", module: "log4j"
}
Sin embargo, estoy usando una biblioteca de prueba (hadoop-minicluster
), que tiene una dependencia de tiempo de ejecución de log4j, por lo que ahora tengo que permitir que una dependencia log4j para mi tiempo de ejecución de pruebas . He intentado añadir una dependencia directa de log4j:
testRuntime group: "log4j", name: "log4j", version: "1.2.15"
y editar mi código de exclusión (un poco de un truco):
configurations.findAll {!it.name.endsWith('testRuntime')}.each { conf ->
conf.exclude group: "log4j", module: "log4j"
}
Pero esto no funciona. Al agregar la exclusión a testCompile conf, automáticamente se agrega a todas las configuraciones heredadas, incluido testRuntime. Y parece que esta exclusión anula incluso la dependencia explícita que agregué.
Parece que este es el comportamiento esperado para Gradle. De the docs:
si se define una exclusión para una configuración particular, la dependencia transitiva excluidos será filtrada para todas las dependencias de la hora de resolver esta configuración o cualquier configuración heredar.
Entonces, ¿hay alguna otra manera de hacer lo que quiero lograr?
Ideas:
- Crear un nuevo conf
myTestRuntime
que no se extiende a partir testCompile, y el uso que para mi ruta de clase de prueba.- Pero entonces tengo que duplicar todas las dependencias, tanto para testCompile y myTestRuntime.
- Retire las exclusiones de nivel de configuración. Para todos los confs aparte de testRuntime, recorra las dependencias y elimine manualmente log4j (o agregue una exclusión de nivel dep en log4j).
- Es esto posible? Configuration.allDependencies es de solo lectura.
¿No pudo hacer su exclusión global y luego agregar el 'log4j-over-slf4j.jar'? http://www.slf4j.org/legacy.html – Snekse
@Snekse que también funcionaría. buena idea –