#java #maven #annotation-processor
#java #maven #обработчик аннотаций
Вопрос:
Я пишу обработчик аннотаций Java для сбора метаданных из аннотаций в теле кода. Я хочу, чтобы выходной файл начинался с версии проекта maven. Просматривая документацию javac для Oracle java 8, кажется, я должен иметь возможность передавать версию проекта в качестве опции процессору аннотаций с использованием обозначения -A key=value
. Поэтому я настроил maven-compiler-plugin, чтобы установить core.versionId
параметр для версии проекта следующим образом:
<configuration>
<compilerArgs>
<arg>-A core.versionId=${project.version}</arg>
</compilerArgs>
</configuration>
Однако, когда я компилирую, я получаю следующую ошибку:
Fatal error compiling: key in annotation processor option '-A core.versionId=1.7.0-SNAPSHOT' is not a dot-separated sequence of identifiers
Похоже, что project.version был вставлен правильно, но компилятору не удалось обработать параметр -A, как было объявлено. Должно быть, я что-то упускаю, но я не вижу, что это такое, и я не могу найти никаких упоминаний об этой проблеме. Любая помощь очень ценится.
Обновление: ошибка исчезнет, если я удалю пробел, сделав аргумент равным -Acore.versionId=${project.version}
, но в этом случае параметр core.versionId не отображается в процессоре аннотаций.
Комментарии:
1. Вы посмотрели это в своем
AnnotationProcessor
processingEnv.getOptions().get("core.versionId")
блоге ?2. Вот соответствующая строка:
String artifactVersion = processingEnv.getOptions().get("core.versionId");
3. Вы посмотрели, есть ли вообще какие-либо параметры в среде?
4. Карта параметров кажется пустой.
5. Посмотрев на страницу maven-compiler-plugin, может быть, вам стоит использовать
forceJavacCompilerUse
? См.: maven.apache.org/plugins/maven-compiler-plugin /…
Ответ №1:
Оказывается, в исходном вопросе была опущена важная часть информации. Компилируемый модуль также нуждается в объединении с AspectJ, который повторно запускает компилятор. Процессор аннотаций действительно работал и выдавал правильный вывод на этапе компиляции, но был немедленно перезаписан вторым запуском процессора аннотаций на этапе ткачества AspectJ. Добавление некоторой конфигурации в предложение aspectj-maven-plugin решило проблему:
<configuration>
<proc>none</proc>
</configuration>