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
myTestRuntime
das 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für heute habe ich geschafft, das problem zu umgehen, aber ich immer noch offen für jede bessere Lösungen.
Hier ist, was ich am Ende tun:
Hinzufügen einer neuen Konfiguration nur für log4j:
Lassen Sie die config-level-Ausschluss für alle Konfigurationen außer, dass man:
Fügen Sie die log4j-Konfiguration auf meinem tests " classpath:
Diese Weise können wir bekommen log4j.jar auf den classpath, obwohl es ausgeschlossen ist von der testRuntime Konfiguration.
InformationsquelleAutor der Antwort Chris B
Selbst begegnete ich ähnlichen situation, wo ich brauche, um auszuschließen spark-Gläser aus, darunter in Fett jar-test aber Fällen erfordert spark-Gläser zur Ausführung.so wird im folgenden die Konfiguration für mich gearbeitet. Also im Grunde bin ich das hinzufügen compile-Zeit-Abhängigkeiten für test-classpath. also für dein problem unterhalb Lösung sollte funktionieren
InformationsquelleAutor der Antwort user3435860
Sollten Sie nicht brauchen, um zu definieren einen Ausschluss. Es sei denn, Sie konfiguriert Sie neu, etwas, ein Projekt
testRuntime
Konfiguration wird nur verwendet, für das Projekttest
Aufgabe.InformationsquelleAutor der Antwort Peter Niederwieser