我在我的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'
}
但是這並沒有幫助。所以,這個包依然存在於依賴中。
有什麼辦法可以在編譯時從jar中排除一個包嗎?
「一個是Java的一部分」 - Android中沒有'javax.realtime'。 JDK的類庫具有'javax.realtime'的事實沒有意義,因爲在編譯Android應用程序時,您沒有使用JDK的類庫。 – CommonsWare
感謝您的回答,您100%正確,我的錯誤。問題依賴於javolution(來自JScience庫),因爲它包含'javax.realtime'包。 –