Mein Gradle-Projekt verwendet das application
Plugin, um eine JAR-Datei zu erstellen. Als Teil der transitiven Laufzeitabhängigkeiten ziehe ich am Ende ein org.slf4j:slf4j-log4j12
. (Es wird in mindestens 5 oder 6 anderen transitiven Abhängigkeiten als subtransitive Abhängigkeit bezeichnet - dieses Projekt verwendet Spring und Hadoop, also wird alles außer dem Spülbecken eingezogen ... keine Wartezeit ... das ist auch da :) ).
Ich möchte das slf4j-log4j12
Glas global von meinem gebauten Glas ausschließen. Also habe ich das versucht:
configurations {
runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}
Dies scheint jedoch alle org.slf4j
Artefakte einschließlich auszuschließen slf4j-api
. Wenn ich im Debug-Modus laufe, sehe ich Zeilen wie:
org.slf4j#slf4j-api is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-simple is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-log4j12 is excluded from org.apache.hadoop:hadoop-common:2.2.0(runtime).
Ich möchte nicht die Quelle jeder slf4j-log4j12
transitiven Abhängigkeit nachschlagen müssen und dann einzelne compile foo { exclude slf4j... }
Anweisungen in meinem dependencies
Block haben.
Aktualisieren:
Ich habe auch folgendes versucht:
configurations {
runtime.exclude name: "slf4j-log4j12"
}
Was dazu führt, dass alles vom Build ausgeschlossen wird! Als ob ich angegeben hätte group: "*"
.
Update 2:
Ich verwende dafür Gradle Version 1.10.
Antworten:
Ah, das Folgende funktioniert und macht was ich will:
Es scheint, dass eine Ausschlussregel nur zwei Attribute hat -
group
undmodule
. Die obige Syntax hindert Sie jedoch nicht daran, eine beliebige Eigenschaft als Prädikat anzugeben. Wenn Sie versuchen, eine einzelne Abhängigkeit auszuschließen, können Sie keine beliebigen Eigenschaften angeben. Dies schlägt beispielsweise fehl:mit
Also, obwohl Sie eine Abhängigkeit mit a angeben können
group:
undname:
Sie keinen Ausschluss mit aname:
!?!Vielleicht eine separate Frage, aber was genau ist dann ein Modul ? Ich kann den Maven-Begriff von groupId :ifactId: version verstehen, der meines Wissens in grouple: group: name: version in Gradle übersetzt wird. Aber woher weiß ich dann, zu welchem Modul (in Gradle-Sprache) ein bestimmtes Maven-Artefakt gehört?
quelle
configurations { runtime.exclude group: '*' }
.Um eine oder mehrere Bibliotheken global auszuschließen, fügen Sie Ihrem build.gradle Folgendes hinzu
Nun schließt der Block hat zwei Eigenschaften Gruppe und Modul . Für diejenigen unter Ihnen, die aus dem Maven-Hintergrund stammen, ist group identisch mit groupId und module ist identisch mit artefaktId . Beispiel: Um com.mchange auszuschließen: c3p0: 0.9.2.1 sollte der folgende Ausschlussblock sein
quelle
Ihr Ansatz ist richtig. (Abhängig von den Umständen möchten Sie möglicherweise verwenden
configurations.all { exclude ... }
.) Wenn diese Ausschlüsse wirklich mehr als eine einzelne Abhängigkeit ausschließen (das habe ich bei der Verwendung noch nie bemerkt), melden Sie bitte einen Fehler unter http://forums.gradle.org , idealerweise mit einem reproduzierbaren Beispiel.quelle
configurations.all{}
ist genau das, wonach ich gesucht habe. Danke für den Beitrag Peterim folgenden Beispiel schließe ich aus
quelle
Ich habe Spring Boot 1.5.10 verwendet und versucht, die Rückmeldung auszuschließen. Die oben angegebene Lösung hat nicht gut funktioniert. Stattdessen verwende ich Konfigurationen
quelle
Zusätzlich zu dem, was @ berguiga-mohamed-amine angegeben hat, habe ich gerade festgestellt, dass für einen Platzhalter das Modulargument die leere Zeichenfolge belassen muss:
quelle