web-dev-qa-db-fra.com

Dagger 2, parfois lors de la compilation, j'obtiens "je ne trouve pas la classe de symboles DaggerApplicationComponent"

Récemment après la mise à jour Android Studio (2.0.7) (c'est peut-être la cause), parfois, lors de la construction, j'obtiens cette erreur.

L’idée est qu’en général la compilation se passe bien, mais j’ai parfois une erreur de poignard.

Est-ce possible que ce soit un problème dans la configuration du poignard?

L'erreur elle-même: 

Executing tasks: [:app:assembleDebug]

Configuration on demand is an incubating feature. Incremental Java compilation is an incubating feature. :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72311Library UP-TO-DATE :app:prepareComAndroidSupportDesign2311Library UP-TO-DATE :app:prepareComAndroidSupportMultidex101Library UP-TO-DATE :app:prepareComAndroidSupportRecyclerviewV72311Library UP-TO-DATE :app:prepareComAndroidSupportSupportV42311Library UP-TO-DATE :app:prepareComDaimajiaSwipelayoutLibrary120Library UP-TO-DATE :app:prepareComF2prateekRxPreferencesRxPreferences101Library UP-TO-DATE :app:prepareComGithubAakiraExpandableLayout141Library UP-TO-DATE :app:prepareComGithubAfollestadMaterialDialogsCore0842Library UP-TO-DATE :app:prepareComGithubCastorflexSmoothprogressbarLibraryCircular120Library UP-TO-DATE :app:prepareComJakewhartonRxbindingRxbinding030Library UP-TO-DATE :app:prepareComPnikosisMaterialishProgress17Library UP-TO-DATE :app:prepareComTrelloRxlifecycle040Library UP-TO-DATE :app:prepareComTrelloRxlifecycleComponents040Library UP-TO-DATE :app:prepareComWdullaerMaterialdatetimepicker211Library UP-TO-DATE :app:prepareIoReactivexRxandroid110Library UP-TO-DATE :app:prepareMeRelexCircleindicator116Library UP-TO-DATE :app:prepareMeZhanghaiAndroidMaterialprogressbarLibrary114Library UP-TO-DATE :app:prepareDebugDependencies :app:compileDebugAidl UP-TO-DATE :app:compileDebugRenderscript UP-TO-DATE :app:generateDebugBuildConfig UP-TO-DATE :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets UP-TO-DATE :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources UP-TO-DATE :app:mergeDebugResources UP-TO-DATE :app:processDebugManifest UP-TO-DATE :app:processDebugResources UP-TO-DATE :app:generateDebugSources UP-TO-DATE :app:compileDebugJavaWithJavac /home/ungvas/AndroidDev/Projects/FW/paynet-Android/app/src/main/Java/md/fusionworks/paynet/ui/activity/BaseActivity.Java:23: error: cannot find symbol import md.fusionworks.paynet.di.component.DaggerActivityComponent; ^ symbol: class DaggerActivityComponent location: package md.fusionworks.paynet.di.component /home/ungvas/AndroidDev/Projects/FW/paynet-Android/app/src/main/Java/md/fusionworks/paynet/PaynetApplication.Java:7: error: cannot find symbol import md.fusionworks.paynet.di.component.DaggerApplicationComponent; ^ symbol: class DaggerApplicationComponent location: package md.fusionworks.paynet.di.component 2 errors

Incremental compilation of 66 classes completed in 3.719 secs. :app:compileDebugJavaWithJavac FAILED :app:compileRetrolambdaDebug

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

Total time: 19.556 secs
Merci. 

42
user1542447

Il semble que cela ait quelque chose à voir avec la compilation incrémentale ajoutée dans Gradle 2.10.

J'ai réussi à le réparer en ajoutant la commande suivante à gradle:

-Pandroid.incrementalJavaCompile=false

Vous pouvez l'ajouter dans Android Studio dans: Fichier | Paramètres | Construire, Exécuter, Déployer | Compilateur en l'ajoutant en tant que Option de ligne de commande .

edit à partir de 2.0.0-beta3 le plugin vous avertit que cette option a été ajoutée à DSL Gradle:

Android {
    compileOptions.incremental = false
}
24
DanielDiSu

Vous devez mettre à jour votre version 2.11 pour le poignard.

Votre build.gradle 's dependencies block devrait ressembler à ceci:.

dependencies {
    // Other dependencies should go here
    compile "com.google.dagger:dagger:2.11"
    annotationProcessor "com.google.dagger:dagger-compiler:2.11"
    provided 'javax.annotation:jsr250-api:1.0'
    compile 'javax.inject:javax.inject:1'
}

J'espère que cela t'aides.

5
Hiren Patel

Changements en 2017:

Android Studio Canary utilise une version plus récente de Gradle et les plugins apt peuvent ne pas fonctionner, remplacés par annotationProcessor. Il peut échouer malgré l'avertissement du compilateur indiquant qu'il sera supprimé dans une future version de gradle. 

Changer cette ligne de dépendance: 

apt 'com.google.dagger:dagger-compiler:2.7'

à

annotationProcessor 'com.google.dagger:dagger-compiler:2.7'

et supprimez le plugin apt. 

5
KATHYxx

La dernière version de Dagger (2.8) est à l'origine de cette erreur. Assurez-vous que vos dépendances sont comme mentionné ci-dessous

apt 'com.google.dagger:dagger-compiler:2.7' compile 'com.google.dagger:dagger:2.7'

3
fardown

Assurez-vous que vous utilisez Java version 1.7. De plus, si quelque chose d'autre est cassé dans votre pipeline de poignards, cela provoquera également cette erreur. 

1
Horatio

J'ai eu un problème similaire mais pour une raison différente.
J'ai eu le problème seulement en essayant de générer l'apk. Sinon, cela fonctionnait correctement.
Dans mon cas, le problème était que la classe se trouvait dans le répertoire test au lieu du répertoire main pour une raison inconnue, je l’ai déplacée dans main et cela a fonctionné.
J'espère que ça aide quelqu'un

1
PhpLou

Fichier-> InvalidateCaches/Restart travaillé pour moi

1
D1 and 1ly

J'utilisais un module de bibliothèque pur Java, mais j'utilisais le plugin kotlin et les dépendances de dague, comme ceci:

build.gradle

apply plugin: 'kotlin'
dependencies {
    implementation "com.google.dagger:dagger:2.22.1"
    kapt "com.google.dagger:dagger-compiler:2.22.1"
}

L'erreur était, j'ai manqué d'ajouter le plugin kotlin-kapt. Ainsi, mon fichier build.gradle s'est terminé comme ceci:

apply plugin: 'kotlin'
apply plugin: "kotlin-kapt" // make sure you added this line

dependencies {
    implementation "com.google.dagger:dagger:2.22.1"
    kapt "com.google.dagger:dagger-compiler:2.22.1"
}
1

В моем случае ничего из вышеперечисленного не работает.

Выполните шаги для создания класса DaggerApplicationComponent.

  1. Истый проект
  2. Перестроить проект
  3. Импортировать вручнуюOption+ReturnOUAlter+EnterÀ la une

Готово

1
Hiren Patel

Tout d’abord, ajoutez cette ligne aux dépendances du buildscript dans le fichier Project build.gradle.

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

Deuxièmement, ajoutez cette ligne en haut dans le fichier Module: app build.gradle

apply plugin: 'com.neenbedankt.Android-apt'
0
s-hunter

utilisez la même version de poignard pour toutes les dépendances de poignard. a travaillé pour moi.

implementation "com.google.dagger:dagger:$daggerVersion"
implementation "com.google.dagger:dagger-Android-support:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-Android-processor:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"


//define version in main build.gradle
ext {
    daggerVersion = '2.11'
}
0
rajeswari ratala

Vérifiez vos annotations partout pour chaque composant et module. Mon problème était que j'utilisais @Named dans le module mais que je ne le définissais pas dans le constructeur.

0
Arpit

Dans le cas où j'ai reçu cette erreur, l'erreur signalée était erronée, en ce sens qu'une erreur avec DaggerMyComponent avait été signalée, mais la cause fondamentale en était que - ailleurs dans le code - j'avais utilisé par erreur le @BindView de ButterKnife. avec un membre de type vue privé; corriger cela a éliminé l'erreur.

0
aandotherchars

Dans mon cas, dans le présentateur, je n'ai pas utilisé l'annotation @Inject pour la méthode surchargée de gestionnaire de données, etc.

 @Inject
 public RegisterPresenter(DataManager dataManager, SchedulerProvider 
             schedulerProvider, CompositeDisposable compositeDisposable) {
                super(dataManager, schedulerProvider, compositeDisposable);
}
0
Mayuresh Deshmukh

J'ai eu ce problème, mais il y avait deux échecs lors de la construction. L'un était le composant manquant, mais l'autre était un ButterKnife @BindView n'a pas pu trouver la vue. Corriger ceci a corrigé le composant manquant. Je suppose que tout traitement d'annotation ayant échoué causera des problèmes similaires.

0
Matt Goodwin

Essayez d’exécuter l’application, la construction échouera et vous aurez alors la possibilité d’importer les classes. Ceci est dû au fait que dagger importe ces classes uniquement au moment de l'exécution et non au moment de la compilation.

0
Burhan Shakir