2014-05-23 46 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

相关问题