2013-06-05 15 views
6

私は古いIntelliJプロジェクトを使ってgradleを使用しようとしています。しかし、assembleDebugはDXステップ中に失敗:メインプロジェクトとライブラリプロジェクト:Roboguice依存関係のある複数のプロジェクトと複数のプロジェクト

java.lang.IllegalArgumentException: already added: Lcom/google/inject/AbstractModule; 
    at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) 
    at com.android.dx.dex.file.DexFile.add(DexFile.java:163) 
    at com.android.dx.command.dexer.Main.processClass(Main.java:490) 
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) 
    at com.android.dx.command.dexer.Main.access$400(Main.java:67) 
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398) 
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245) 
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131) 
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109) 
    at com.android.dx.command.dexer.Main.processOne(Main.java:422) 
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333) 
    at com.android.dx.command.dexer.Main.run(Main.java:209) 
    at com.android.dx.command.dexer.Main.main(Main.java:174) 
    at com.android.dx.command.Main.main(Main.java:91) 

私のプロジェクトは、二つのサブプロジェクトに分割されます。これらのプロジェクトはどちらもRoboguiceとGuiceを依存関係にしています。

in this answerのように、複数のプロジェクトでサポートライブラリを含むためのXavの回避策を試しました。 roboguice/guiceが両方とも中央からピックアップされている場合、回避策は必要ではないでしょう。私はroboguice/guiceに依存する唯一のプロジェクトであるダミーのライブラリプロジェクトを作成しました。私のメインプロジェクトと(真の)ライブラリプロジェクトの両方がこのダミープロジェクトに依存するようにしました。しかし、私は同じエラーが発生します。

どのようにこれを修正できますか?ルートディレクトリに

include 'MainApp' 
include 'library' 
include 'common-library' 

build.gradle:メイン・プロジェクト、およびリアルタイムで

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.4.2' 
    } 
} 

allprojects { 
    version = '1.0' 

    repositories { 
     mavenCentral() 
    } 
} 

apply plugin: 'android-reporting' 

build.gradleルートディレクトリに

settings.gradle図書館プロジェクト:

apply plugin: 'android' 

android { 
    compileSdkVersion 15 
    buildToolsVersion "17.0" 
    sourceSets   { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
     } 
    } 
} 

dependencies { 
    compile project(':library') // only in main, not in real library 
    compile project(':common-library') 
} 
0123ダミーライブラリプロジェクトで

build.gradle

apply plugin: 'android-library' 

android { 
    compileSdkVersion 15 
    buildToolsVersion "17.0" 
    sourceSets   { 
     main { 
      manifest.srcFile 'AndroidManifest.xml' 
      java.srcDirs = ['src'] 
      res.srcDirs = ['res'] 
     } 
    } 
} 

dependencies { 
    compile 'org.roboguice:roboguice:2.0' 
    compile 'com.google.inject:guice:3.0' 
} 

答えて

9

あなたはMavenを使っているので、ダミーのライブラリが必要ではないことですね。 .pom for Roboguiceを見ると、Guiceは "no_aop"クラシファイアとの依存関係として表示されます。しかし、あなたはGuiserを明示的に分類子なしでリストしています。私の推測では、Mavenは両方のバージョンを使用しているため、デクシング・マージの競合が発生します。

Gradleビルドファイルからcompile 'com.google.inject:guice:3.0'を削除してビルドするかどうかを確認してください。

+0

おかげで、働いています。なぜ私が依存関係にguiceを追加する必要があると感じたのかを覚えていない。 – Hrushikesh

0

よろしくお願いします。 この問題を解決するには、library-projectのbuild.gradleで 'exclude module'を使用してください。

がここに私の例である: コンパイル( 'oauth.signpost:道標-commonshttp4:1.2.1.2'){ モジュールを除外: 'httpcore'}

関連する問題