параметр обработчика аннотаций компилятора java передан неправильно

#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>