Java: Comment communiquer entre un processeur d'annotation et un autre projet?
-
06-07-2019 - |
Question
J'ai mon propre processeur d'annotation (appelons-le MonProcesseur) et un projet (appelons-le MonProjet) qui utilise le processeur par
passage de -processor
à javac
.
J'ai maintenant besoin de MyProcessor pour produire une sortie et la rendre disponible pour MyProject.
J'ai les options suivantes (et les problèmes):
-
Laissez MyProcessor écrire un fichier sur le chemin, spécifié par la propriété
user.dir
.
Problème du point de vue de MyProcessor,user.dir
correspond toujours à mon répertoire personnel et non au chemin de MyProject. -
Passez le répertoire actuel de MyProject à MyProcessor à l'aide de l'option
javac
de-A
.
Problème : c'est un très mauvais chemin codé en dur:/ some / path / to / MyProject /
. -
Laissez MyProcessor générer des fichiers source, qui seraient ensuite compilés par
javac
avec MyProject, afin que MyProject puisse faire référence à cette classe compilée et en extraire des données.
Problème : c'est trop complexe pour une tâche aussi facile (?). -
Quelles sont les autres options?
Quelqu'un peut-il suggérer comment procéder?
La solution
Processor.init ()
(que vous avez implémentée) est invoquée avec ProcessingEnvironment en tant que paramètre ayant à son tour une méthode getFiler ()
renvoyant un instance de Filer .
Vous devriez utiliser la méthode createResource ()
du Filer
(en supposant que la sortie générée ne soit ni une classe ni une source; sinon, utilisez create
pour cela) et écrivez votre sortie sur class ou source emplacements (ancien est probablement préférable, mais cela dépend de ce que vous faites). Les deux sont remplaçables via des commutateurs de ligne de commande si nécessaire, mais ils sont bien définis car ils doivent être utilisés dans un processus de construction.