Java - Язык:Как взаимодействовать между обработчиком аннотаций и другим проектом?

StackOverflow https://stackoverflow.com/questions/1627669

Вопрос

У меня есть собственный обработчик аннотаций (давайте назовем это 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 метод для этого) и запишите свой вывод в любой класс или Источник местоположения (первое, вероятно, предпочтительнее, но это зависит от того, что вы делаете).Оба они переопределяются с помощью переключателей командной строки, если это необходимо, но четко определены, поскольку они должны использоваться в процессе сборки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top