2014-05-23 6 views
8

Ich benutze Gradle in meiner Android Anwendung und möchte die JScience Bibliotheksabhängigkeit verwenden. Ich habe die Bibliothek auf diese Weise hinzugefügt:Gradle: Wie man das javax.realtime Paket aus der JScience jar Abhängigkeit ausschließt (Mehrere dex definieren)

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

    compile 'org.jscience:jscience:4.3.1' 

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

Aber in der Kompilierung erhalte ich die Fehlermeldung:

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) 

Dies wegen Duplizieren javax.realtime Pakete in Projekt verursacht wird, ein Teil des JDK ist, und der zweite ist in der Jscience-Bibliothek. Ich habe versucht, dieses Paket aus Jscience-Bibliothek auf diese Weise in Gradle zu entfernen:

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

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

Aber das hat nicht geholfen. Also, dieses Paket ist immer noch in Abhängigkeiten vorhanden. enter image description here

Gibt es eine Möglichkeit, wie kann ich ein Paket von jar auf Kompilierzeit ausschließen?

+2

"man ist ein Teil von Java" - es gibt keine 'javax.realtime' in Android. Die Tatsache, dass die Klassenbibliothek eines JDK 'javax.realtime' hat, ist bedeutungslos, da Sie beim Kompilieren einer Android-App keine Klassenbibliothek eines JDK verwenden. – CommonsWare

+0

Danke für die Antwort, Sie sind 100% korrekt, mein Fehler. Das Problem lag in der Abhängigkeit von javolution (die aus der JScience-Bibliothek stammt), da es das Paket 'javax.realtime' enthält. –

Antwort

16

Falls jemand etwas brauchte, war das Problem in Javolution Abhängigkeit von JScience Bibliothek. Beide haben ein javax.runtime Paket. Mit Ausnahme der Javolution wurde das Problem für mich behoben.

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

Vielen Dank dafür. Ich konnte die überlappenden Abhängigkeiten nicht auf der üblichen Route finden 'gradle -q app: dependencies' -> Mit welchem ​​Befehl hast du in die Anwendung gegraben, wenn ich fragen kann? – AllDayAmazing

+0

Ich erinnere mich nicht schon, aber ich denke, dass vielleicht eine Art von 'Gradle Abhängigkeiten' Befehl oder Abhängigkeit Tree Tool von Intellij Idea –

+0

Vielen Dank dafür. Dies löste mein Problem mit "java.exe beendet mit Nicht-Null-Exit-Wert 2". – Ralphilius

Verwandte Themen