Gradle - schließt eine Abhängigkeit für eine Konfiguration aus, aber nicht für eine erbende Konfiguration

Verwendung von Gradle 1.0 Meilenstein 8.

Mein Projekt verwendet slf4j+Logback für die Protokollierung, so will ich verhindern, dass jede transitive Abhängigkeiten auf log4j von umweltbelastenden mein classpath. So, ich Hinzugefügt eine Globale Ausgrenzung, etwa so:

configurations {
    all*.exclude group: "log4j", module: "log4j"
}

Allerdings bin ich mit einer test-Bibliothek ( hadoop-minicluster ), die eine runtime Abhängigkeit auf log4j, so dass ich mir jetzt erlauben müssen, eine log4j-dependency für meine test-runtime. Ich habe versucht, das hinzufügen einer direkten Abhängigkeit zu log4j:

testRuntime group: "log4j", name: "log4j", version: "1.2.15"

und Bearbeiten der my-Ausschluss-code (ein bit von einem hack):

configurations.findAll {!it.name.endsWith('testRuntime')}.each { conf ->
    conf.exclude group: "log4j", module: "log4j"
}

Aber das funktioniert nicht. Hinzufügen der Ausschluss der testCompile conf automatisch Hinzugefügt, um alle Erben Konfigurationen, einschließlich testRuntime. Und es scheint, dass dieser Ausschluss überschreibt sogar die explizite Abhängigkeit, die ich Hinzugefügt.

Es scheint, dass dies ist das erwartete Verhalten für Gradle. Von die docs:

Wenn Sie definieren, ausschließen, die für eine bestimmte Konfiguration, die ausgeschlossen transitive Abhängigkeit wird gefiltert, um alle Abhängigkeiten, die beim auflösen dieser Konfiguration oder alle Erben Konfiguration.

Also gibt es irgendeine andere Möglichkeit, das zu tun, was ich erreichen will?

Ideen:

  • Erstellen Sie eine neue conf myTestRuntimedas nicht verlängern von testCompile, und verwenden Sie diese für meine test-classpath.
    • Aber dann habe ich die doppelte alle Abhängigkeiten für beide testCompile und myTestRuntime.
  • Entfernen config-level-AUSSCHLÜSSE. Für alle confs abgesehen von testRuntime, eine Schleife über Abhängigkeiten und manuell entfernen log4j (oder fügen Sie eine dep-level-Ausschluss auf log4j).
    • Ist das überhaupt möglich? - Konfiguration.allDependencies ist schreibgeschützt.

InformationsquelleAutor der Frage Chris B | 2012-03-29

Schreibe einen Kommentar