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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top