exclude group: ‘javax.inject’してinjection系のjava.lang.NoClassDefFoundErrorを回避する

espressoを導入するためにcom.android.support.test.espresso:espresso-corecom.android.support.test:testing-support-libをインストールします。
そうすると、テスト実施時に

java.lang.NoClassDefFoundError: ...

というようなエラーを確認できることがあります。

このエラーはDaggerやRoboGuiceを導入していると確認されました。これは、espressoのjavax.injectが競合しているから発生している模様です。なので、以下のようにexclude groupで指定してあげると、回避できます。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.dagger:dagger:2.0-SNAPSHOT'
    apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'

    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.0') {
        exclude group: 'javax.inject'
    }
}

ここらへんのpom.xmlなんか眺めていると、確かにjavax.injectが依存関係で確認できますね。

なるほど。

関連
stackoverflow

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.