2014-05-23 11 views
8

Używam Gradle w mojej aplikacji Android i chciałbym użyć zależności biblioteki JScience. Dodałem biblioteki w ten sposób:Gradle: Jak wykluczyć pakiet javax.realtime z zależności JScience jar (wiele dex define)

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 

    compile 'org.jscience:jscience:4.3.1' 

    testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

Ale w czasie kompilacji pojawia się błąd:

UNEXPECTED TOP-LEVEL EXCEPTION: 
com.android.dex.DexException: Multiple dex files define Ljavax/realtime/MemoryArea; 
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) 
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) 
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) 
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) 
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188) 
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) 
    at com.android.dx.command.dexer.Main.run(Main.java:230) 
    at com.android.dx.command.dexer.Main.main(Main.java:199) 
    at com.android.dx.command.Main.main(Main.java:103) 

Spowodowane jest to z powodu powielania javax.realtime pakietów w projekcie, jeden jest częścią JDK, a drugi znajduje się w bibliotece Jscience. Próbowałem usunąć ten pakiet z biblioteki Jscience w ten sposób w Gradle:

sourceSets { 
    main { 
     java { 
      exclude 'javax/realtime/**' 
     } 
    } 
} 

configurations { 
    all*.exclude group: 'javax.realtime' 
} 

Ale to nie pomogło. Tak więc ten pakiet nadal istnieje w zależnościach. enter image description here

Czy istnieje sposób, w jaki sposób mogę wyłączyć pakiet z słoika podczas kompilacji?

+2

"jeden jest częścią Java" - nie ma "javax.realtime" w systemie Android. Fakt, że biblioteka klas JDK ma 'javax.realtime' jest bez znaczenia, ponieważ nie używasz biblioteki klasy JDK podczas kompilowania aplikacji dla systemu Android. – CommonsWare

+0

Dzięki za odpowiedź, jesteś w 100% poprawny, mój błąd. Problem polegał na javolution (która pochodzi z biblioteki JScience), ponieważ zawiera pakiet 'javax.realtime'. –

Odpowiedz

16

W przypadku, gdy ktoś potrzebuje, problem polegał na zależności JScience od JScience. Oboje robią hava pakiet javax.runtime. Wyłączenie Javolution rozwiązało problem.

compile ('org.jscience:jscience:4.3.1') { 
    exclude group: 'org.javolution', module: 'javolution' 
} 
+0

Dziękuję za to. Nie mogłem znaleźć nakładających się zależności na zwykłej trasie 'gradle -q app: dependencies' -> jakiej komendy użyłeś do zagłębienia się w aplikacji, jeśli mogę zapytać? – AllDayAmazing

+0

Nie pamiętam już, ale myślę, że może jakiś rodzaj polecenia 'zależności zależności' lub narzędzie drzewa zależności Intellij Idea –

+0

Dziękuję za to. Rozwiązało to mój problem z "java.exe zakończone niezerową wartością wyjściową 2" .. – Ralphilius

Powiązane problemy