Java - Язык:Как взаимодействовать между обработчиком аннотаций и другим проектом?
-
06-07-2019 - |
Вопрос
У меня есть собственный обработчик аннотаций (давайте назовем это MyProcessor) и проект (давайте назовем это MyProject) который использует процессор путем
передачи -processor
Для javac
.
Теперь мне нужен MyProcessor, чтобы создать некоторый вывод и сделать его доступным для MyProject.
У меня есть следующие варианты (и проблемы):
Пусть MyProcessor запишет файл по пути, указанному свойством
user.dir
.
Проблема: с точки зрения моего процессора,user.dir
это всегда мой домашний каталог, а не путь к MyProject.Передайте текущий каталог MyProject в MyProcessor, используя
javac
's-A
вариант.
Проблема: Это уродливый жестко закодированный путь:/some/path/to/MyProject/
.Пусть MyProcessor сгенерирует несколько исходных файлов, которые затем будут скомпилированы
javac
вместе с MyProject, чтобы MyProject мог ссылаться на этот скомпилированный класс и извлекать из него данные.
Проблема: Это слишком сложно для такой простой (?) задачи.Какие еще есть варианты?
Может кто-нибудь, пожалуйста, подсказать, как действовать дальше?
Решение
Processor.init()
метод (который вы реализовали) вызывается с помощью Обрабатывающая среда в качестве параметра, который, в свою очередь, имеет getFiler()
метод, возвращающий Файлер пример.
Вы должны использовать createResource()
метод проведения Filer
(предполагая, что генерируемый результат не является ни классом, ни источником;в противном случае используйте соответствующие create
метод для этого) и запишите свой вывод в любой класс или Источник местоположения (первое, вероятно, предпочтительнее, но это зависит от того, что вы делаете).Оба они переопределяются с помощью переключателей командной строки, если это необходимо, но четко определены, поскольку они должны использоваться в процессе сборки.