2013-11-14 12 views
14

Come posso ignorare una specifica dipendenza transitiva in Gradle?Come ignorare una specifica dipendenza transitiva da tutte le dipendenze in Gradle

Per esempio, molte biblioteche (come la primavera e ...) dipendono commons-logging, voglio sostituire commons-logging con SLF4J (e il suo ponte JCL-over-slf4j).

E 'in qualche modo nel mio script gradle parlarne una volta, e non per ogni dipendenza che dipende da commons-logging?

Stavo pensando a una sceneggiatura, a iterare su tutte le dipendenze e aggiungendo un po 'di exclude su tutte, c'è una soluzione migliore? E come sarà lo script?

+0

Prova strategia di risoluzione: http://stackoverflow.com/questions/23124509/how-to-exclude-specific-jars-from-web-inf-lib/30393301#30393301 – smilyface

risposta

18
configurations { 
    compile.exclude group: 'commons-logging' 
} 
+8

Oppure: ' configurations.all {exclude group: 'commons-logging'} '. –

+1

Esiste un modo per escludere una versione specifica di un gruppo? – JayKay

13

Sono venuto qui con lo stesso problema ma ho finito per usare il seguente per fare una sostituzione vera e propria. Pubblicandolo per completezza.

configurations.all { 
    resolutionStrategy.eachDependency { 
     if(it.requested.name == 'commons-logging') { 
      it.useTarget 'org.slf4j:jcl-over-slf4j:1.7.7' 
     } 
    } 
} 
+1

Complimenti per la tua risposta e l'eleganza di Gradle nell'affrontare tali compiti. –

+1

Vorrei aggiungere che nel frattempo una nuova versione di Gradle è fuori e ha sostituzioni di moduli. Non l'ho ancora provato, ma sembra che potrebbero fare la stessa cosa. – user2543253