Gradle:如何从JScience jar依赖项中排除javax.realtime包(多个dex定义)

Yur*_*kov 8 java dependencies android jscience gradle

我在我的Android应用程序中使用Gradle,我想使用JScience库依赖项.我这样添加了库:

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

    compile 'org.jscience:jscience:4.3.1'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}
Run Code Online (Sandbox Code Playgroud)

但是在编译时我收到错误:

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)
Run Code Online (Sandbox Code Playgroud)

这是因为javax.realtime项目中的包重复,一个是JDK的一部分,第二个是在Jscience库中.我试图在Gradle中以这种方式从Jscience库中删除此包:

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

configurations {
    all*.exclude group: 'javax.realtime'
}
Run Code Online (Sandbox Code Playgroud)

但这没有帮助.因此,该包仍然存在于依赖项中. 在此输入图像描述

有没有什么办法可以在编译时从jar中排除一个包?

Yur*_*kov 17

如果有人需要,问题是Javolution依赖于JScience图书馆.他们都做了javax.runtime包裹.排除Javolution已经解决了我的问题.

compile ('org.jscience:jscience:4.3.1') {
    exclude group: 'org.javolution', module: 'javolution'
}
Run Code Online (Sandbox Code Playgroud)