Java: Как общаться между процессором аннотаций и другим проектом? - PullRequest
1 голос
/ 27 октября 2009

У меня есть собственный процессор аннотаций (назовем его MyProcessor) и проект (назовем его MyProject) , который использует процессор прохождение -processor до javac.

Теперь мне нужен MyProcessor, чтобы произвести вывод и сделать его доступным для MyProject.

У меня есть следующие варианты (и проблемы):

  • Пусть MyProcessor записывает файл в путь, указанный свойством user.dir.
    Проблема: с точки зрения MyProcessor, user.dir всегда мой домашний каталог, а не путь MyProject.

  • Передайте текущий каталог MyProject в MyProcessor, используя опцию javac -A.
    Проблема: Это ужасно жестко заданный путь: /some/path/to/MyProject/.

  • Пусть MyProcessor сгенерирует некоторые исходные файлы, которые затем будут скомпилированы javac вместе с MyProject, чтобы MyProject мог ссылаться на этот скомпилированный класс и получать из него данные.
    Проблема: Слишком сложно для такой простой (?) Задачи.

  • Какие есть еще варианты?

Может кто-нибудь подсказать, пожалуйста, как поступить?

1 Ответ

4 голосов
/ 27 октября 2009

Processor.init() метод (который вы реализовали) вызывается с ProcessingEnvironment в качестве параметра, который, в свою очередь, имеет метод getFiler(), возвращающий Filer экземпляр.

Вы должны использовать createResource() метод Filer (при условии, что генерируемый вывод не является ни классом, ни источником; в противном случае используйте соответствующий метод create) и записать свой вывод либо в class или источник местоположений (первое, вероятно, предпочтительнее, но зависит от того, что вы делаете). Оба могут быть переопределены с помощью переключателей командной строки, если это необходимо, но они четко определены, так как они должны использоваться в процессе сборки.

...