62 votes

Configuration du processeur d'annotations explicites

J'essaie d'ajouter un dépôt maven à mon projet Android Studio. Lorsque j'effectue une synchronisation de projet Gradle, tout va bien. Cependant, lorsque j'essaie de construire mon apk, j'obtiens cette erreur :

Execution failed for task ':app:javaPreCompileDebug'.
> Annotation processors must be explicitly declared now.  The following dependencies on 
the compile classpath are found to contain annotation processor.  Please add them to 
the annotationProcessor configuration.
 - classindex-3.3.jar
Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions
.includeCompileClasspath = true to continue with previous behavior.  Note that this 
option is deprecated and will be removed in the future.
See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.

Le lien inclus ( https://developer.Android.com/r/tools/annotation-processor-error-message.html ) dans les erreurs 404, ce qui n'est d'aucune utilité.

J'ai activé le traitement des annotations dans les paramètres d'Android studio, et j'ai ajouté includeCompileClasspath = true aux options de mon processeur d'annotation. J'ai également essayé d'ajouter classindex , classindex-3.3 y classindex-3.3.jar à Processor FQ Name, mais cela n'a pas aidé non plus.

Ce sont les lignes que j'ai ajoutées au build.gradle par défaut sous dependecies :

dependencies {
    ...
    compile group: 'com.skadistats', name: 'clarity', version:'2.1.1'
    compile group: 'org.atteo.classindex', name: 'classindex', version:'3.3'
}

À l'origine, je n'avais ajouté que l'entrée "clarity", car c'est celle qui m'intéresse, mais j'ai ajouté l'entrée "classindex" dans l'espoir qu'elle corrige le problème. Supprimer "clarity" et garder "classindex" me donne exactement la même erreur.

Je ne suis pas très familier avec gradle/maven, donc toute aide serait appréciée.

0 votes

87voto

Snowman Points 2234

Pour corriger l'erreur, il suffit de modifier la configuration de ces dépendances pour utiliser annotationProcessor. Si une dépendance comprend des composants qui doivent également figurer dans le classpath de compilation, déclarez cette dépendance une deuxième fois et utilisez la configuration de la dépendance de compilation.

Par exemple :

annotationProcessor 'com.jakewharton:butterknife:7.0.1'
compile 'com.jakewharton:butterknife:7.0.1'

Ce lien le décrit en détail : https://developer.Android.com/studio/preview/features/new-Android-plugin-migration.html#annotationProcessor_config

Un extrait pertinent a été inclus pour compléter l'information.

Utiliser la configuration des dépendances du processeur d'annotation

Dans les versions précédentes du plugin Android pour Gradle, les dépendances sur le le classpath de compilation étaient automatiquement ajoutées au classpath du processeur. classpath. En d'autres termes, vous pouviez ajouter un processeur d'annotation au classpath de la compilation et il fonctionnait comme prévu. classpath de compilation et il fonctionnerait comme prévu. Cependant, cela entraîne un impact significatif sur la performance en ajoutant un grand nombre de dépendances dépendances inutiles au processeur.

Lors de l'utilisation du nouveau plugin, les processeurs d'annotations doivent être ajoutés à l'interface de l'utilisateur. processeur en utilisant la configuration de dépendance annotationProcessor comme indiqué ci-dessous :

dépendances { ... annotationProcessor 'com.google.dagger:dagger-compiler:' (processeur d'annotation) }

Le plugin suppose qu'une dépendance est un processeur d'annotation si son fichier JAR contient le fichier suivant : META- INF/services/javax.annotation.processing.Processor. Si le plugin détecte des processeurs d'annotation dans le classpath de la compilation échoue et vous obtenez un message d'erreur qui liste chaque processeur d'annotation sur le classpath de compilation. Pour corriger l'erreur, il suffit de modifier la configuration de ces dépendances pour utiliser annotationProcessor. Si une dépendance inclut des composants qui doivent également se trouver dans le classpath de déclarez cette dépendance une seconde fois et utilisez la configuration de la dépendance compile de la dépendance.

36voto

luizMello Points 2308

J'ai été confronté à une erreur similaire. Je suis les instructions sur le lien Google et ça marche.

essayez d'ajouter les instructions suivantes au fichier gradle de votre application :

defaultConfig {
    applicationId "com.yourdomain.yourapp"
    minSdkVersion 17
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"

    javaCompileOptions {
        annotationProcessorOptions {
            includeCompileClasspath = false
        }
    }
}

Attention à -> includeCompileClasspath faux

14 votes

"Notez que cette option est dépréciée et sera supprimée à l'avenir."

1 votes

Oui @everyman, mais pour l'instant c'est l'option que nous avons pour gérer cela.

1 votes

Il est recommandé de ne pas utiliser cette approche. Veuillez vous référer à cette réponse à la place. stackoverflow.com/a/44294076/1237141

23voto

Amirouche Zeggagh Points 1213

Ajoutez ce code à votre application gradle

defaultConfig{
    javaCompileOptions {
        annotationProcessorOptions {
            includeCompileClasspath true
        }
    }
}

J'ai trouvé la solution ici https://github.com/JakeWharton/butterknife/issues/908

11voto

Mohamed Hussien Points 101

Il suffit de mettre à jour votre couteau à beurre avec le processeur Annotation

compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

J'espère que cela vous aidera

4voto

Tushar Ahmed Points 39

Ajouter ceci dans defaultConfig

android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true

1 votes

Cette option est obsolète et sera supprimée à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X