web-dev-qa-db-fra.com

@Annotation générée à l'aide de gradlew + dagger

Je suis confronté à un problème étrange en utilisant gradlew (4.10.2) + dagger (2.18).

Le problème est quand j'appelle:

./gradlew :app:compileDebugAndroidTestKotlin 

La construction échoue avec:

Tâche: commune: compileDebugJavaWithJavac FAILED

/CommonModule_ProvidesGsonFactory.Java:6: erreur: le package javax.annotation.processing n'existe pas import javax.annotation.processing. Generated ;

/CommonModule_ProvidesGsonFactory.Java:8: erreur: impossible de trouver le symbole @ Généré (

Mais si j'exécute la tâche de Android Studio , la tâche réussit et le @Generated n'est pas présent dans la classe générée par la dague.

Avez-vous des indices pour éviter le @Generated annotation avec ./gradlew?

14
crgarridos

Dagger utilise auto-commonGeneratedAnnotations pour savoir quels @Generated annotation à utiliser. Il le fait en fonction du chemin de classe.

Cela signifie que lorsque le processeur d'annotations est en cours d'exécution, javax.annotation.processing.Generated est disponible et utilisé dans le générateur, mais lorsque le fichier résultant est compilé dans une autre tâche, il n'est plus sur le chemin de classe.

Les causes potentielles pourraient être que le code a été généré à l'aide d'une version plus récente du JDK et que la construction incrémentielle n'est pas valide, nécessitant un nettoyage et une reconstruction complets ou qu'il y a un problème avec Java niveaux de langue où le le processeur d'annotation fonctionne sur Java 9+, mais Android est compilé comme Java 8 ou inférieur).

2
Kiskae