Dagger Annotation Processor无法找到com / google / common / collect / SetMultimap

时间:2017-12-14 13:31:05

标签: android dagger-2

我一直负责将Dagger集成到我们现有的项目中,而且我对匕首注释处理器有一点问题。

我的环境非常有限,所以我不能只使用jcenter()甚至Google Maven来获取依赖关系。我们有一个内部常春藤仓库,用于存储和管理我们所有的依赖关系。

也就是说,我已经删除了Dagger所需的所有依赖项,但我仍有问题。 Gradle sync成功完成并解析依赖项,但是当我进行构建时,我收到以下错误。

  

错误:服务配置文件错误,或者抛出异常   构造Processor对象:javax.annotation.processing.Processor:   提供者dagger.internal.codegen.ComponentProcessor不可能   实例化:java.lang.NoClassDefFoundError:   COM /谷歌/普通/收集/ SetMultimap

显然我错过了一个依赖关系,因为当我明确指定并允许jcenter()和Google Maven作为存储库时,我可以为测试目的而做,但是对于prod构建这是不允许的,我能够构建没有例外

现在严格阅读错误告诉我Dagger无法找到com.google.comm.collect.SetMutliMap。

我已经搜索了很多试图找到这种依赖关系,我发现的所有内容都是该文件是Guava的一部分或者至少是它的一些功能。

需要注意的一点是我使用的是以下版本的gradle:

    classpath 'com.android.tools.build:gradle:3.0.0'

这是我在build.gradle中的dagger依赖,它是一个旧版本:

    //Dagger
    compile 'com.google.dagger:dagger:2.10'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.10'

其他依赖项:

    //lifecycle libs
    compile "android.arch.lifecycle:runtime:1.0.3"
    compile "android.arch.lifecycle:extensions:1.0.0"
    annotationProcessor "android.arch.lifecycle:compiler:1.0.0"

    compile 'de.greenrobot:eventbus:2.4.1'
    compile 'org.apache.commons:commons-lang3:3.4'
    compile 'commons-io:commons-io:2.4'
    compile 'com.android.support:multidex:1.0.1'

    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.android.support:design:26.1.0'

    compile 'com.github.ganfra:material-spinner:2.0.0'

    compile 'com.nulab-inc:zxcvbn:1.1.3'

    compile('com.google.android.gms:play-services-vision:10.2.1') {
        exclude group: 'com.android.support'
    }

    compile 'org.zakariya.stickyheaders:stickyheaders:0.7.6'

    compile 'com.google.code.gson:gson:2.8.0'

    compile('com.google.android.gms:play-services-gcm:10.2.1') {
        exclude group: 'com.android.support'
    }
    compile('com.google.android.gms:play-services-maps:10.2.1') {
        exclude group: 'com.android.support'
    }
    compile('com.google.android.gms:play-services-location:10.2.1') {
        exclude group: 'com.android.support'
    }
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support:cardview-v7:26.1.0'

    compile 'com.android.support:support-annotations:26.1.0'

    //retrofit dependencies
    compile 'com.squareup.okhttp3:okhttp:3.9.0'
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'

由于我的环境有限,我不能像我想的那样更新依赖项,所以在我所拥有的内容中工作,是否有人对如何解决这个问题有任何想法?

由于

1 个答案:

答案 0 :(得分:0)

事实证明com.google.common.collectcom.google.guava的一部分 有了这个发现,我发现了一个有效的解决方案。无论出于何种原因,dagger-compiler都没有解决自己的依赖关系,即com.google.guava

我的解决方案包括从编译器中排除guava依赖项并将其添加到annotationProcessor路径。我还排除了查找我的案例的错误,因为旧版本是我们测试项目中的依赖项。

annotationProcessor ('com.google.guava:guava:22.0'){
    exclude group: 'com.google.code.findbugs'
}
annotationProcessor('com.google.dagger:dagger-compiler:2.13') {
    exclude group: 'com.google.guava'
}