How do I run annotation processing via maven 3.3?
Asked Answered
P

1

4

For years, we've been running the maven-processor-plugin as a separate goal (using proc:none on maven-compiler-plugin). We are finally upgrading from maven 3.0.5 to the latest 3.3.3, and I see that the maven-processor-plugin basically looks dead. As far I a can tell, it has not been migrated out of google code.

We're using annotation processing primarily to generate dagger classes. I can't remember the reasons, but at the time (in dagger-1), we got the impression it is better to do this during generate-sources and generate-test-sources phases rather than during the compile and test-compile, which is why we used the maven-processor-plugin to begin with. Note that we want it all to play nicely in eclipse/m2e as well.

Is there a new, better way to run annotation processing from maven that is eclipse-friendly?

Precontract answered 25/8, 2015 at 1:12 Comment(0)
B
3

You can use the maven-compiler-plugin for annotation processing because the functionality exists in javac. To do annotation processing and regular compilation in separate phases, you can do multiple executions of the plugin, one with annotation processing turned on, the other with it turned off. The configuration for that is as follows:

<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>
Bellis answered 27/1, 2016 at 18:38 Comment(2)
I upgraded to 3.6.0 and found that I had to remove the -proc:none argument for the compile phase of my annotations weren't compiled. Do you know of a change to another phase that would have removed the annotation class compilations? See my question (and pom) at #49161082Simmons
Is MyAnnotationProcessor a fully qualified name (as in package + class name)?Kuchen

© 2022 - 2024 — McMap. All rights reserved.