Dagger 2:关于子组件的错​​误,但我的应用程序

时间:2017-02-05 15:29:40

标签: android dagger-2

我试图在我的应用中使用Dagger 2。我一直收到这个错误:

  

错误:任务':app:compileDebugJavaWithJavac'执行失败。   java.lang.IllegalArgumentException:@dagger.Module没有定义元素子组件()

我根本不在应用程序中使用子组件,因此我不知道为什么会出现此错误。我有一个模块和一个组件。模块:

@Singleton
@Module

public class ApplicationModule {

private final WSTApplication application;

public ApplicationModule(WSTApplication application) {
    this.application = application;
}

@Provides
public WSTApplication application() {
    return this.application;
}

@Provides
public Context applicationContext() {
    return this.application;
}

@Provides
Realm provideRealm() {
    return Realm.getDefaultInstance();
}

@Provides
RealmHelper providesRealmHelper(final Realm realm) {
    return new RealmHelper(realm);
}

@Provides
@Singleton
public WorkoutPresenter providesWorkoutPresenter(final RealmHelper helper) {
    return new WorkoutPresenter(helper);
}

}

我的组件:

@Singleton
@Component(modules={ApplicationModule.class})
public interface ApplicationComponent {

    void inject (MainActivity activity);

    WSTApplication application();

    Context applicationContext();

    Realm provideRealm();

    RealmHelper providesRealmHelper(Realm realm);

    WorkoutPresenter providesWorkoutPresenter(RealmHelper helper);

}

这是我申请中的onCreate:

@Override
public void onCreate() {
    super.onCreate();

    component = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule(this))
            .build();
}

我也无法让DaggerApplicationComponent停止变红,但我认为这是因为项目因为这个奇怪的子组件错误而实际上并没有建立?我尝试过使用下划线(Dagger_ApplicationComponent),但这并没有帮助。

我试过谷歌,但我找到的只是如何在Dagger中使用子组件的指南,这不是我想要的。我不想使用子组件。我只想使用一个组件。

另外,万一这很重要,这就是我在build.gradle文件中添加的内容:

在项目内容中:

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

在应用程序级别build.gradle:

apply plugin: 'com.neenbedankt.android-apt'

然后依赖于依赖项:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.google.dagger:dagger:2.1'
    compile 'com.android.support:support-v4:24.2.1'
    testCompile 'junit:junit:4.12'
    apt 'com.google.dagger:dagger-compiler:2.7'
    provided 'org.glassfish:javax.annotation:10.0-b28'
}

感谢任何可以帮助我的人!我是Dagger2的新手,甚至在阅读了几本初学者指南之后,我仍然没有完全理解它(我希望尝试使用它会让事情变得更清楚......到目前为止它已经很清楚了作为漏油事件)。提前抱歉我极有可能犯了一个愚蠢的初学者错误。

2 个答案:

答案 0 :(得分:4)

为什么使用com.neenbedankt.android-apt?据我所知GitHub page

Dagger Dagger releases解释了如何在Android项目中使用它。

dependencies {
    compile 'com.google.dagger:dagger:2.x'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
}

在这里,您可以找到依赖版本的re.search

我不确定它是否能立即解决您的问题,但您一定要试一试。

答案 1 :(得分:4)

您获得的错误来自Dagger API和注释处理器之间的版本偏差:compile 'com.google.dagger:dagger:2.1'apt 'com.google.dagger:dagger-compiler:2.7'。在这种特殊情况下,编译器正在寻找@Module.subcomponents(),但它不在您的@Module版本(版本2.1)中,因为它不会被添加到https://github.com/mrmike/DiffUtil-sample {1}}。

TL;博士

api和注释处理器应该始终是相同的版本。