简体   繁体   English

Dagger构建错误

[英]Dagger build error

I've got two objects which I inject with dagger2 without any problems. 我有两个对象,我用dagger2注入没有任何问题。 When I add third one (the same way like two before), project does not rebuild and gives errors, that points into first two (nothing here about added third one): 当我添加第三个(与之前的两个相同的方式)时,项目不会重建并给出错误,这指向前两个(这里没有添加第三个):

error: com.google.firebase.database.DatabaseReference cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
com.google.firebase.database.DatabaseReference is injected at
com.hotmail.at.jablonskimichal.dni.wolne.od.handlu.ui.splash.SplashPresenter.freeDaysCloudReference
com.hotmail.at.jablonskimichal.dni.wolne.od.handlu.ui.splash.SplashPresenter is injected at
com.hotmail.at.jablonskimichal.dni.wolne.od.handlu.providers.components.MainPresenterComponent.inject(destination)

Every three modules and components are implemented in the same way. 每三个模块和组件以相同的方式实现。 Of course when I delete added third one, projects compiles easily. 当然,当我删除添加的第三个时,项目很容易编译。

Module which messes project build: 混淆项目构建的模块:

@Module
public class MainPresenterModule {

    private final MainPresenter presenter;

    public MainPresenterModule(MainPresenter presenter) {
        this.presenter = presenter;
    }

    @Singleton
    @Provides
    MainPresenter provideMainPresenter() {
        return presenter;
    }

}

Component: 零件:

@Singleton
@Component(modules = {MainPresenterModule.class})
public interface MainPresenterComponent {
    void inject(SplashPresenter destination);
}

Maybe useful: I am using those libraries for DI with dagger2: 也许有用:我用dagger2将这些库用于DI:

    implementation 'com.google.dagger:dagger-android:2.11'
    implementation 'com.google.dagger:dagger-android-support:2.11'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

with newest android studio (3.1.1) and gradle (3.1.1) on mac osx. 在mac osx上使用最新的android studio(3.1.1)和gradle(3.1.1)。 Of course I've tried invalidating cache and restarts, cleans etc. I've checked imports and all of them are the same. 当然我已经尝试过无效缓存和重新启动,清理等等。我检查了导入,所有这些都是相同的。

Edit: When I remove usage of injection 编辑:当我删除注入的使用

    @Inject
    DatabaseReference shopsCloudReference;

    public MainPresenter(MainController controller) {
        super(controller);
        Core.injectShopsComponent().into(this);
    }

And

    @Inject
    DatabaseReference freeDaysCloudReference;

    public SplashPresenter(SplashController controller) {
        super(controller);
        Core.injectFreeDaysComponent().into(this);
    }

project compiles, but it is not what I wanted. 项目编译,但它不是我想要的。

EDIT There's lot of answers that I didn't add firebase libs in gradle. 编辑有很多答案,我没有在gradle中添加firebase库。 My full gradle: 我全力以赴:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.hotmail.at.jablonskimichal.dni.wolne.od.handlu"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

allprojects {
    repositories {
        mavenCentral()
        google()
        maven { url "https://jitpack.io" }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    //tests
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

    //support
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'

    //images loading
    implementation 'com.github.bumptech.glide:glide:4.4.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'

    //network
    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
    implementation 'com.squareup.retrofit2:retrofit:2.2.0'

    //json parsing
    implementation 'com.squareup.retrofit2:converter-gson:2.2.0'
    implementation 'com.google.code.gson:gson:2.8.0'

    //for view bindings
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    //rxjava
    def rxVersion = '2.0.2'
    implementation "io.reactivex.rxjava2:rxandroid:$rxVersion"
    implementation "io.reactivex.rxjava2:rxjava:$rxVersion"
    implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

    //dagger
    implementation 'com.google.dagger:dagger-android:2.11'
    implementation 'com.google.dagger:dagger-android-support:2.11'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

    //google
    implementation 'com.google.android.gms:play-services-maps:15.0.0'
    implementation 'com.google.firebase:firebase-database:15.0.0'
    implementation 'com.google.firebase:firebase-core:15.0.0'

    //datetime
    implementation group: 'joda-time', name: 'joda-time', version: '2.9.9'

    //transitions
    implementation "com.andkulikov:transitionseverywhere:1.7.9"

    //kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

apply plugin: 'com.google.gms.google-services'

Well, you wrote : 好吧,你写道:

@Component(modules = {MainPresenterComponent.class})

It should be : 它应该是 :

@Component(modules = {MainPresenterModule.class})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM