Search code examples
javamaven-2mavenmaven-3annotation-processing

Writing an annotation processor for maven-processor-plugin


I am interested in writing an annotation processor for the maven-processor-plugin. I am relatively new to Maven.

Where in the project path should the processor Java source code go (e.g.: src/main/java/...) so that it gets compiled appropriately, but does not end up as part of my artifact JAR file?


Solution

  • The easiest way is to keep your annotation processor in a separate project that you include as dependency.

    If that doesn't work for you, use this config

    Compiler Plugin:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
            <source>1.5</source>
            <target>1.5</target>
        </configuration>
        <inherited>true</inherited>
        <executions>
            <execution>
                <id>default-compile</id>
                <inherited>true</inherited>
                <configuration>
                    <!-- limit first compilation run to processor -->
                    <includes>path/to/processor</includes>
                </configuration>
            </execution>
            <execution>
                <id>after-processing</id>
                <phase>process-classes</phase>
                <goals>
                    <goal>compile</goal>
                </goals>
                <inherited>false</inherited>
                <configuration>
                    <excludes>path/to/processor</excludes>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    Processor Plugin:

    <plugin>
        <groupId>org.bsc.maven</groupId>
        <artifactId>maven-processor-plugin</artifactId>
        <executions>
            <execution>
                <id>process</id>
                <goals>
                    <goal>process</goal>
                </goals>
                <phase>compile</phase>
                <configuration>
                    <processors>
                        <processor>com.yourcompany.YourProcessor</processor>
                    </processors>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    (Note that this must be executed between the two compile runs, so it is essential that you place this code in the pom.xml after the above maven-compiler-plugin configuration)

    Jar Plugin:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.1</version>
        <configuration>
            <excludes>path/to/processor</excludes>
        </configuration>
        <inherited>true</inherited>
    </plugin>