Кинжал 2 не генерирует класс компонентов

Я работаю с Dagger 2, чтобы создать инъекцию зависимости. Он работал несколько часов назад, но теперь компоненты больше не создаются.

Здесь я создаю компоненты:

public class App extends Application {

    CacheComponent mCacheComponent;
    ApiComponent mApiComponent;
    DataBaseComponent mDataBaseComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        mCacheComponent = DaggerCacheComponent.builder()
                .cacheModule(new CacheModule(getApplicationContext()))
                .build();

        mApiComponent = DaggerApiComponent.builder()
                .apiModule(new ApiModule())
                .build();

        mDataBaseComponent = DaggerDataBaseComponent.builder()
                .dataBaseModule(new DataBaseModule(getApplicationContext()))
                .build();
    }

    public CacheComponent getCacheComponent(){ return mCacheComponent;}
    public ApiComponent getApiComponent() { return mApiComponent;  }
    public DataBaseComponent getDataBaseComponent() { return mDataBaseComponent;}
}

Это работало, но теперь я получаю ошибки:

E:AndroidProjectJoinTVappsrcmainjavacommyprojectjointvutilsApp.java:7: error: cannot find symbol
import com.myproject.jointv.component.DaggerApiComponent;
                                       ^       
  symbol:   class DaggerApiComponent           
  location: package com.myproject.jointv.component
E:AndroidProjectJoinTVappsrcmainjavacommyprojectjointvutilsApp.java:8: error: cannot find symbol
import com.myproject.jointv.component.DaggerCacheComponent;
                                       ^       
  symbol:   class DaggerCacheComponent         
  location: package com.myproject.jointv.component
E:AndroidProjectJoinTVappsrcmainjavacommyprojectjointvutilsApp.java:9: error: cannot find symbol
import com.myproject.jointv.component.DaggerDataBaseComponent;
                                       ^       
  symbol:   class DaggerDataBaseComponent      
  location: package com.myproject.jointv.component
Note: Resolve log file to E:AndroidProjectJoinTVappuildgeneratedsourceaptandroidannotations.log
Note: Initialize AndroidAnnotations 3.3.2 with options {androidManifestFile=E:AndroidProjectJoinTVappuildintermediatesmanifestsfulldebugAndroidManifest.xml, resourcePackage
Name=com.myproject.jointv}
Note: Start processing for 5 annotations on 32 elements
Note: AndroidManifest.xml file found with specified path: E:AndroidProjectJoinTVappuildintermediatesmanifestsfulldebugAndroidManifest.xml
Note: AndroidManifest.xml found: AndroidManifest [applicationPackage=com.myproject.jointv, componentQualifiedNames=[com.myproject.jointv.activities.MainActivity_, com.myproject
.jointv.activities.YoutubePlayerViewActivity, com.myproject.jointv.activities.VideoPlayerActivity_, com.myproject.jointv.services.ServiceDownloaderPlayList], permissionQualifiedN
ames=[android.permission.INTERNET, android.permission.WRITE_EXTERNAL_STORAGE], applicationClassName=com.myproject.jointv.utils.App, libraryProject=false, debugabble=false, minSdkVe
rsion=21, maxSdkVersion=-1, targetSdkVersion=23]
Note: Found project R class: com.myproject.jointv.R
Note: Found Android class: android.R           
Note: Validating elements                      
Note: Validating with EActivityHandler: [com.myproject.jointv.activities.MainActivity, com.myproject.jointv.activities.VideoPlayerActivity]
Note: Validating with EFragmentHandler: [com.myproject.jointv.fragments.VideoPlayerFragment]
Note: Validating with ViewByIdHandler: [buttonPlay, videoView, videoView]
Note: Validating with FragmentArgHandler: [url, cachePath]
Note: Validating with AfterViewsHandler: [onViewInjected(), afterViewInjected()]
Note: Processing root elements                 
Note: Processing root elements EActivityHandler: [com.myproject.jointv.activities.VideoPlayerActivity, com.myproject.jointv.activities.MainActivity]
Note: Processing root elements EFragmentHandler: [com.myproject.jointv.fragments.VideoPlayerFragment]
Note: Processing enclosed elements             
Note: Number of files generated by AndroidAnnotations: 3
Note: Writting following API classes in project: []
Note: Generating class: com.myproject.jointv.fragments.VideoPlayerFragment_
Note: Generating class: com.myproject.jointv.activities.MainActivity_
Note: Generating class: com.myproject.jointv.activities.VideoPlayerActivity_
Note: Time measurements: [Whole Processing = 387 ms], [Extract Manifest = 131 ms], [Generate Sources = 97 ms], [Process Annotations = 59 ms], [Find R Classes = 43 ms], [Extract Annot
ations = 25 ms], [Validate Annotations = 18 ms],
Note: Finish processing                        
E:AndroidProjectJoinTVappsrcmainjavacommyprojectjointvcomponentApiComponent.java:22: error: com.myproject.jointv.database.DataBaseHelper cannot be provided without an
@Inject constructor or from an @Provides- or @Produces-annotated method.
    void inject(ServiceDownloaderPlayList service);
         ^                                     
      com.myproject.jointv.services.ServiceDownloaderPlayList.dataBaseHelper
          [injected field of type: com.myproject.jointv.database.DataBaseHelper dataBaseHelper]
E:AndroidProjectJoinTVappsrcmainjavacommyprojectjointvcomponentDataBaseComponent.java:18: error: com.myproject.jointv.api.WherePlaysAPI cannot be provided without an @
Provides- or @Produces-annotated method.
    void inject(ServiceDownloaderPlayList service);
         ^                                     
      com.myproject.jointv.services.ServiceDownloaderPlayList.wherePlaysAPI
          [injected field of type: com.myproject.jointv.api.WherePlaysAPI wherePlaysAPI]
Note: Start processing for 0 annotations on 0 elements
Note: Time measurements: [Whole Processing = 1 ms],
Note: Finish processing                        
5 errors                                       
:app:compileDebugJavaWithJavac FAILED          

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.

* Try:        
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED  

Есть мое приложение для градиента.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

И мой модуль градиента

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

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.myproject.jointv"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


apt {
    arguments {
        androidManifestFile variant.outputs[0].processResources.manifestFile
        resourcePackageName android.defaultConfig.applicationId
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.squareup.retrofit:retrofit:1.9.0'
    compile 'com.android.support:recyclerview-v7:23.2.0'
    compile 'com.android.support:leanback-v17:23.2.0'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.github.bumptech.glide:glide:3.4.+'
    compile 'com.squareup.okhttp:okhttp:2.5.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.5.0'
    compile 'com.android.support:support-v4:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile 'com.danikula:videocache:2.3.3'
    compile 'org.androidannotations:androidannotations-api:3.3.2'
    apt 'org.androidannotations:androidannotations:3.3.2'
    compile 'com.google.dagger:dagger:2.0.2'
    apt 'com.google.dagger:dagger-compiler:2.0.2'
    provided 'org.glassfish:javax.annotation:10.0-b28'

}

Я использую одну и ту же конфигурацию весь день, но теперь я не знаю, где может быть проблема, и почему она не генерирует класс компонентов.

ApiComponent.

@Singleton
@Component(modules = {
        ApiModule.class,
        DataBaseModule.class
})

public interface ApiComponent {
    void inject(ServiceDownloaderPlayList service);
}

CacheComponent

@Singleton
@Component(modules = {
        CacheModule.class
})
public interface CacheComponent {
    void inject(VideoPlayerFragment fragment);
}

DataBaseComponent

@Singleton
@Component(modules = {
        DataBaseModule.class
})
public interface DataBaseComponent {
    void inject(ServiceDownloaderPlayList service);
}

Советы

Когда я комментирую DataBaseComponent или ApiComponent, все работает.

android,android-gradle,build.gradle,dagger-2,

7

Ответов: 1


1

если вы используете apt-плагин следующим образом:

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

затем включить

apt "com.google.dagger: dagger-compiler: $ DAGGER_VERSION"

вместе с

компилировать "com.google.dagger: кинжал: $ DAGGER_VERSION"

в модульном уровне build.gradle

Помимо проблемы с конфигурацией Dagger2 также не сможет сгенерировать классы Component, если в зависимом модуле или классах есть какая-либо ошибка (скорее всего синтаксическая ошибка).

просто откройте зависимые классы и исправьте проблему, если они есть, и заново создайте проект.

Некоторые недействительные кеширования также работают: Android Studio-> file-> invalidate cache и Restart

андроид, андроид-Gradle, build.gradle, Кинжал-2,
Похожие вопросы