Вывод процессора аннотаций в maven

Я использую JSR 269 как способ анализа кода во время компиляции и, при необходимости, отказа от него. У меня проблемы с отображением вывода моего процессора аннотаций в maven (Ant действительно показывает вывод). Я использую javax.annotation.processing.Messager для отображения предупреждений и ошибок, но в maven я не вижу его вывода. (Я знаю, что он работает, потому что он генерирует код, как и должен). Любые идеи?


person iGili    schedule 10.10.2012    source источник
comment
Как процессор выводит сообщения? Как вы его вызываете?   -  person matt b    schedule 10.10.2012
comment
Показывается ли вывод, если вы вызываете maven с параметром -X?   -  person Jörn Horstmann    schedule 10.10.2012
comment
@matt b Я использую javax.annotation.processing.Messager для отображения предупреждений: _messager=processingEnv.getMessager(); @Jorn: я не использую параметр -X, процессор указан как поставщик услуг   -  person iGili    schedule 10.10.2012
comment
Я больше спрашивал о том, как процессор выводит свои сообщения - в регистратор, в стандартный выход и т. Д.?   -  person matt b    schedule 10.10.2012
comment
API мессенджера предоставляет способ вывода сообщений на стандартный вывод. Он должен отображать предупреждения о компиляции, как это делает компилятор.   -  person iGili    schedule 11.10.2012
comment
Единственный ответ ниже не принимается. Есть ли какой-то другой ответ, более правильный на данный момент?   -  person Patrick    schedule 23.10.2012
comment
Мне пришлось заняться другими вещами (наш POC скоро должен быть выпущен), но я постараюсь обновить в ближайшее время.   -  person iGili    schedule 24.10.2012


Ответы (2)


Я думаю, вы столкнулись с ошибкой Maven или, лучше, с ошибкой в ​​​​плагине компилятора - MCOMPILER- 66. Когда дело доходит до обработки аннотаций, плагин компилятора имеет несколько проблем, например, также MCOMPILER-62. На самом деле лучший вариант — отключить обработку аннотаций для плагина компилятора и использовать maven-процессор-плагин. В этом сообщении в блоге вы можете увидеть, как его использовать. Это выглядит так:

   <plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <compilerArgument>-proc:none</compilerArgument>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.bsc.maven</groupId>
        <artifactId>maven-processor-plugin</artifactId>
        <version>1.3.7</version>
        <executions>
            <execution>
                <id>process</id>
                <goals>
                    <goal>process</goal>
                </goals>
                <phase>process-sources</phase>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-jpamodelgen</artifactId>
                <version>1.1.0.Final</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    </plugin>

Обратите также внимание на то, что зависимость обработчика аннотаций хорошо привязана только к плагину.

person Hardy    schedule 11.10.2012

Вы можете сделать это, включив флаг showWarnings в конфигурации maven-compiler-plugin:

<build>
  <plugins>
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <configuration>
         <showWarnings>true</showWarnings>
       </configuration>
    </plugin>
  </plugins>
</build>

См. также https://github.com/Cosium/annotation-processor-logger#enable-all-logging-levels

person Réda Housni Alaoui    schedule 10.08.2018
comment
Обратите внимание, что это включает не только WARNING и MANDATORY_WARNING, но также NOTE и OTHER, которые будут отображаться Maven как INFO. - person rü-; 14.12.2018
comment
Это работает. Вам также может понадобиться <verbose>true</verbose>, особенно если вы используете <fork>true</fork>. - person mernst; 14.03.2020