Как запустить обработку аннотаций через maven 3.3?

В течение многих лет мы запускали плагин maven-processor-plugin как отдельную цель (используя proc:none в плагине maven-compiler-plugin). Мы наконец-то обновляем maven 3.0.5 до последней версии 3.3.3, и я вижу, что maven-processor-plugin в основном выглядит мертвым. Насколько я могу судить, он не был перенесен из кода Google.

Мы используем обработку аннотаций в первую очередь для создания классов кинжалов. Я не могу вспомнить причины, но в то время (в dagger-1) у нас сложилось впечатление, что лучше делать это во время generate-sources и generate-test-sources фаз, а не во время compile и test-compile, поэтому мы использовали maven- процессор-плагин для начала. Обратите внимание, что мы хотим, чтобы все это хорошо работало и в eclipse/m2e.

Есть ли новый, лучший способ запуска обработки аннотаций из maven, который удобен для eclipse?


person Ben    schedule 25.08.2015    source источник


Ответы (1)


Вы можете использовать maven-compiler-plugin для обработки аннотаций, потому что функциональность существует в javac. Чтобы выполнять обработку аннотаций и обычную компиляцию на отдельных этапах, вы можете выполнить несколько запусков плагина, один с обработка аннотаций включена, другая с выключенной. Конфигурация для этого следующая:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5</version>
    <executions>
        <execution>
            <id>process-annotations</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>compile</goal>
            </goals>
            <configuration>
                <compilerArgs>
                    <arg>-proc:only</arg>
                    <arg>-processor</arg>
                    <arg>MyAnnotationProcessor</arg>
                </compilerArgs>
            </configuration>
        </execution>
        <execution>
            <id>default-compile</id> <!-- using an id of default-compile will override the default execution -->
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
            <configuration>
                <compilerArgs>
                    <arg>-proc:none</arg>
                </compilerArgs>
            </configuration>
        </execution>
    </executions>
</plugin>
person heenenee    schedule 27.01.2016
comment
Я обновился до 3.6.0 и обнаружил, что мне пришлось удалить аргумент -proc:none для этапа компиляции моих аннотаций, которые не были скомпилированы. Знаете ли вы об изменении другой фазы, которая удалила бы компиляции классов аннотаций? См. мой вопрос (и pom) в заголовке stackoverflow.com/questions/49160582/ - person Sinc; 09.03.2018
comment
Является ли MyAnnotationProcessor полным именем (как в имени пакета + класса)? - person Dragas; 30.11.2018