Mon projet gradle utilise le application
plugin pour créer un fichier jar. Dans le cadre des dépendances transitives d'exécution, je finis par m'installer org.slf4j:slf4j-log4j12
. (Il est référencé comme une dépendance sous-transitive dans au moins 5 ou 6 autres dépendances transitives - ce projet utilise spring et hadoop, donc tout sauf l'évier de la cuisine est entraîné ... non attendez ... c'est là aussi :) ).
Je souhaite exclure globalement le slf4j-log4j12
pot de mon pot créé. Alors j'ai essayé ceci:
configurations {
runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}
Cependant, cela semble exclure tous les org.slf4j
artefacts, y compris slf4j-api
. Lors de l'exécution en mode débogage, je vois des lignes telles que:
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).
Je ne veux pas avoir à rechercher la source de chaque slf4j-log4j12
dépendance transitive et ensuite avoir des compile foo { exclude slf4j... }
déclarations individuelles dans mon dependencies
bloc.
Mettre à jour:
J'ai aussi essayé ceci:
configurations {
runtime.exclude name: "slf4j-log4j12"
}
Ce qui finit par exclure tout de la construction! Comme si j'avais précisé group: "*"
.
Mise à jour 2:
J'utilise Gradle version 1.10 pour cela.
Réponses:
Ah, ce qui suit fonctionne et fait ce que je veux:
Il semble qu'une règle d'exclusion n'a que deux attributs -
group
etmodule
. Cependant, la syntaxe ci-dessus ne vous empêche pas de spécifier une propriété arbitraire comme prédicat. Lorsque vous essayez d'exclure d'une dépendance individuelle, vous ne pouvez pas spécifier de propriétés arbitraires. Par exemple, cela échoue:avec
Ainsi, même si vous pouvez spécifier une dépendance avec a
group:
et quename:
vous ne pouvez pas spécifier d'exclusion avec aname:
!?!Peut-être une question distincte, mais qu'est- ce qu'un module alors? Je peux comprendre la notion Maven de groupId: artifactId: version, ce que je comprends se traduit par group: name: version dans Gradle. Mais alors, comment savoir à quel module (en gradle-speak) appartient un artefact Maven particulier?
la source
configurations { runtime.exclude group: '*' }
.Pour exclure une ou plusieurs bibliothèques globalement, ajoutez ce qui suit à votre build.gradle
Maintenant, le bloc d'exclusion a deux groupes de propriétés et un module . Pour ceux d'entre vous qui viennent de maven background, group est identique à groupId et module est identique à artifactId . Exemple: pour exclure com.mchange: c3p0: 0.9.2.1 suivant doit être exclure le bloc
la source
Votre approche est correcte. (Selon les circonstances, vous voudrez peut-être utiliser
configurations.all { exclude ... }
.) Si ces exclusions excluent vraiment plus d'une seule dépendance (je ne l'ai jamais remarqué lors de leur utilisation), veuillez signaler un bogue sur http://forums.gradle.org , idéalement avec un exemple reproductible.la source
configurations.all{}
est exactement ce que je cherchais. Merci pour le message Peterdans l'exemple ci-dessous, j'exclus
la source
J'utilisais spring boot 1.5.10 et essayais d'exclure le retour de session, la solution donnée ci-dessus ne fonctionnait pas bien, j'utilise des configurations à la place
la source
En plus de ce que @ berguiga-mohamed-amine a déclaré, je viens de découvrir qu'un caractère générique nécessite de laisser l'argument du module dans la chaîne vide:
la source