12

che sto cercando di risolvere il problema,Come escludere modulo da tutte le dipendenze, ma lasciare esplicita dichiarazione Gradle

Ho alcune dipendenze dichiarato nel file di build.gradle per la mia app Android, ma il problema è che un sacco di queste dipendenze usano la stessa libreria compat, nel mio caso appcompat-v7.
E 'possibile escludere questa libreria per ogni dipendenza

compile ('com.github......'){ 
    exclude group: 'com.android.support', module: 'appcompat-v7' 
} 

ma ho bisogno di fare questo in per ogni dipendenza
Un altro modo è quello di utilizzare tale espressione

configurations { 
    compile.exclude module: 'appcompat-v7' 
} 

Questo funziona, ma anche Se si dichiara esplicitamente questa libreria viene ignorata compile 'com.android.support:appcompat-v7:+'

Tutto ciò di cui ho bisogno è di includere questa libreria solo una volta per l'intera app, perché se compilare senza escludere mostrerà un sacco di errori come has been already defined.
Forse c'è un modo più semplice per farlo funzionare. Sarei grato per qualsiasi aiuto, grazie.

+0

Gradle dovrebbe assicurarsi di assicurarsi che solo una copia della dipendenza si trovi sul percorso della classe alla versione più alta. Potresti aggiornare il tuo post includendo 'gradle dependencyInsight --configuration compile --dependency appcompat-v7'? – Ethan

risposta

0

Usiamo una configurazione fornita in gradle (in modo che quando si gradle: eclipse, i pacchetti sono inclusi, ma non sono inclusi quando vengono compilati in un jar, poiché questi giare dovrebbero essere forniti in fase di esecuzione). Questa configurazione è simile al seguente:

configurations { 
    provided { 
    dependencies.all {dep -> 
     configurations.default.exclude group: dep.group, module:dep.name 
    } 
    } 
    compile.extendsFrom provided 
} 

Questo ci permette di includere le dipendenze come segue:

dependencies { 
    compile("org.scala-lang:scala-library:2.11.7") 
    compile("org.scala-lang:scala-compiler:2.11.7") 
    provided("org.apache.spark:spark-core_2_11:2.0.0") 
} 

Prova a creare una configurazione che contiene tutte le dipendenze in cui si desidera escludere appcompat-v7, e quindi estendere compilare da questa nuova configurazione.