2014-07-06 10 views
6

Sto usando Gradle per il mio progetto. Una delle dipendenze che ho specificato nella mia build.gradle è
compile 'org.glassfish.jersey.media:jersey-media-moxy:2.0'Questa dipendenza mi fornisce due versioni di un jar. Come posso risolvere questo?

Questo funziona bene su una normale applicazione Java, tuttavia quando provo a costruirlo su Android ottengo:

Se si guarda a che le biblioteche sono referenziati, è chiaro che ci sono sia javax.inject-2.3.0-b05.jar e javax.inject-1.jar, che ho trovato sono stati aggiunti dalla dipendenza sopra. Sto indovinando che questo vaso 'duplicato' è ciò che causa l'errore di compilazione.

Come aggirare questo? Perché la dipendenza include due dello stesso barattolo? C'è un modo per rendere la versione di Android costruita con questi due vasi o per rimuovere uno di questi vasi?

risposta

2

Sembra che si dispone di un albero delle dipendenze simile

project 
|--- org.glassfish.jersey.media:jersey-media-moxy:2.0 
| \--- *:javax.inject:1 
\--- *:javax.inject:2.3.0-b05 

Dove * è il gruppo, che ho il sospetto che potrebbero essere diverse da quelle due.

provare a ottenere un'idea di come le dipendenze vengono afferrati utilizzando l'attività dependency

gradle dependency 

se avete bisogno di escludere una dipendenza entrare nel tag, simile all'esempio di seguito

compile('org.hibernate:hibernate:3.1') { 
    //excluding a particular transitive dependency: 
    exclude module: 'cglib' //by artifact name 
    exclude group: 'org.jmock' //by group 
    exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group 
} 
1

Normalmente gradle includerà solo 1 jar per dipendenza. Se viene trovata una versione diversa per le stesse dipendenze, verrà utilizzata la versione più recente.

Tuttavia, nel tuo caso, questi 2 vasetti sono dipendenze con nomi di gruppi diversi:

'javax.inject:javax.inject:1' 
'org.glassfish.hk2.external:javax.inject:2.3.0-b05' 

Ecco perché Gradle includeva sia come essi sono trattati come diverse dipendenze.

'javax.inject: javax.inject: 1' è molto vecchio, penso che dovresti escluderlo come diceva Niels Bech Nielsen.

Per sapere dove viene questa dipendenza viene da, è possibile utilizzare il comando:

gradle -q dependencyInsight --dependency inject 
Problemi correlati