web-dev-qa-db-fra.com

Impossible de trouver la classe de symboles "Généré" pour Dagger 2

Je viens de commencer à faire une injection de dépendance en utilisant Dagger 2. Lorsque j’ai filé ma modules, components et essayé de créer mon application, gradle a lancé l’erreur

Error:(4, 24) error: cannot find symbol class Generated

J'ai creusé dedans et ai trouvé que l'erreur est dans l'une des classes que Dagger génère pour faire DI. La classe particulière qui manquait était javax.annotation.Generated et la ligne générant l'erreur est la ligne qui anntote une classe générée par Dagger sous la forme @Generated("dagger.internal.codegen.ComponentProcessor").

Cette question a aidé à trouver la solution qui consiste à ajouter le paquet javax en tant que dépendance en ajoutant la ligne compile 'org.glassfish:javax.annotation:10.0-b28' à mon fichier de construction gradle. Cela a conduit à une construction réussie.

Ma question est la suivante: pourquoi n’a-t-on pas ajouté cette dépendance en tant que dépendance transitive pour Dagger ou pourquoi personne d’autre n’a-t-il été confronté à ce problème particulier (je suppose que oui, puisque je n’ai trouvé aucune question à ce sujet ici?)?

19
x-treme

Lisez ceci pour plus d'informations: https://github.com/google/dagger/issues/95

En gros, la solution consiste à faire ce que vous avez déjà fait, à savoir inclure la bibliothèque d'annotations Glassfish javax.

13
Alex Fu

TL; DR Dague d'utilisation> = 2.1

Alex a raison, mais il vaut mieux ajouter une dépendance JSR250 au lieu de GlassFish

provided 'javax.annotation:jsr250-api:1.0'

ou pour le dernier plugin Gradle:

compileOnly 'javax.annotation:jsr250-api:1.0'
24
tomrozb

La bonne réponse aujourd’hui est d’utiliser une version de poignard qui est supérieure à 2.1 (à cause du fix mentionné par @tomrozb est intégré dans 2.1)

0
Soham