8

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'
}

しかし、コンパイル時にエラーが発生します:

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します。1 つは JDK の一部であり、もう 1 つは Jscience ライブラリにあります。Gradleでこの方法でJscienceライブラリからこのパッケージを削除しようとしました:

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

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

しかし、それは役に立ちませんでした。そのため、そのパッケージは依存関係にまだ存在しています。 ここに画像の説明を入力

コンパイル時に jar からパッケージを除外する方法はありますか?

4

1 に答える 1

17

誰かが必要とする場合に備えて、問題はライブラリJavolutionからの依存関係にありました。どちらもパッケージJScienceがありません。javax.runtimeを除外するとJavolution、問題が解決しました。

compile ('org.jscience:jscience:4.3.1') {
    exclude group: 'org.javolution', module: 'javolution'
}
于 2014-05-24T05:25:03.417 に答える