2014-05-23 49 views
8

我在我的Android應用程序中使用Gradle,我想使用JScience庫依賴關係。我已經加入了圖書館這樣:Gradle:如何從JScience jar依賴關係中排除javax.realtime包(Multiple dex define)

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

    compile 'org.jscience:jscience:4.3.1' 

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

但是在編譯時出現錯誤:

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) 

這是因爲重複項目javax.realtime包引起的,一個是JDK的一部分,第二個在Jscience圖書館。我試圖從Jscience庫這樣在搖籃中刪除這個包:

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

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

但是這並沒有幫助。所以,這個包依然存在於依賴中。 enter image description here

有什麼辦法可以在編譯時從jar中排除一個包嗎?

+2

「一個是Java的一部分」 - Android中沒有'javax.realtime'。 JDK的類庫具有'javax.realtime'的事實沒有意義,因爲在編譯Android應用程序時,您沒有使用JDK的類庫。 – CommonsWare

+0

感謝您的回答,您100%正確,我的錯誤。問題依賴於javolution(來自JScience庫),因爲它包含'javax.realtime'包。 –

回答

16

如有任何人需要,問題出在Javolution依賴於JScience庫。他們都做了一個javax.runtime包。不包括Javolution已經解決了我的問題。

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

謝謝你。我找不到每個通常的路由'gradle -q app:dependencies'的重疊依賴關係 - >如果我可以問,你用什麼命令挖掘應用程序? – AllDayAmazing

+0

我不記得了,但我想可能是某種'gradle dependencies'命令或Intellij Idea的依賴樹工具 –

+0

謝謝你。這解決了我的問題與「java.exe完成非零退出值2」。 – Ralphilius

相關問題