2014-07-06 3 views
6

Ich benutze Gradle für mein Projekt. Einer der Abhängigkeiten ich in meinem build.gradle angegeben haben, ist
compile 'org.glassfish.jersey.media:jersey-media-moxy:2.0'Diese Abhängigkeit gibt mir zwei Versionen von einem Glas. Wie behebe ich das?

Dies funktioniert auf einer normalen Java-Anwendung in Ordnung, aber wenn ich versuche, es auf Android zu bauen ich:

Wenn an welchen Bibliotheken suchen sind referenziert, es ist klar, dass es sowohl javax.inject-2.3.0-b05.jar und javax.inject-1.jar, die ich gefunden habe, sind durch die obige Abhängigkeit hinzugefügt. Ich vermute, dass dieses "doppelte" Jar den Buildfehler verursacht.

Wie gehe ich das um? Warum enthält die Abhängigkeit zwei gleiche jar? Gibt es eine Möglichkeit, entweder die Android-Version mit diesen beiden Gläsern zu bauen oder eines dieser Gläser zu entfernen?

Antwort

2

Es scheint, dass Sie einen Abhängigkeitsbaum

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

verwandt haben Wo * die Gruppe ist, die ich vermute, aus diesen beiden verschieden sein können.

Versuchen Sie eine Vorstellung davon, wie Sie Ihre Abhängigkeiten immer mithilfe der dependency Aufgabe

gradle dependency 

Sollten Sie es in dem Tag, ähnlich dem Beispiel unten

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 
} 
eine Abhängigkeit geben ausschließen müssen ergriffen werden
1

In der Regel wird nur 1 Glas pro Abhängigkeit enthalten. Wird für die gleichen Abhängigkeiten eine andere Version gefunden, wird die neuere Version verwendet.

jedoch in Ihrem Fall diese zwei Gläser sind Abhängigkeiten mit verschiedenen Gruppennamen:

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

, deshalb, gradle beide enthalten, da sie als unterschiedliche Abhängigkeiten behandelt werden.

'javax.inject: javax.inject: 1' ist sehr alt, ich denke, du solltest es ausschließen wie das, was Niels Bech Nielsen gesagt hat.

gradle -q dependencyInsight --dependency inject 
:

Um herauszufinden, wo diese Abhängigkeit von, können Sie Befehl kommen wird verwenden

Verwandte Themen