【问题标题】:How do I run annotation processing via maven 3.3?如何通过 maven 3.3 运行注释处理?
【发布时间】:2015-11-18 13:42:40
【问题描述】:

多年来,我们一直将 maven-processor-plugin 作为单独的目标运行(在 maven-compiler-plugin 上使用 proc:none)。我们终于从 maven 3.0.5 升级到最新的 3.3.3,我看到 maven-processor-plugin 基本上看起来已经死了。据我所知,它还没有从谷歌代码中迁移出来。

我们主要使用注释处理来生成匕首类。我不记得原因了,但当时(在 dagger-1 中),我们的印象是在 generate-sourcesgenerate-test-sources 阶段而不是在 compiletest-compile 阶段这样做更好,这就是我们开始使用 maven-processor-plugin 的原因。请注意,我们希望它在 eclipse/m2e 中也能很好地发挥作用。

是否有一种新的、更好的方法来从 maven 中运行对 eclipse 友好的注释处理?

【问题讨论】:

    标签: java maven maven-3 dagger


    【解决方案1】:

    您可以使用maven-compiler-plugin 进行注释处理,因为该功能存在于javac 中。要在不同的阶段进行注释处理和常规编译,您可以多次执行插件,一次使用annotation processing turned on,另一次关闭它。其配置如下:

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

    【讨论】:

    • 我升级到 3.6.0,发现我必须删除 -proc:none 参数,因为我的注释的编译阶段没有编译。您是否知道对另一个阶段的更改会删除注释类编译?在stackoverflow.com/questions/49160582/… 看到我的问题(和 pom)
    • MyAnnotationProcessor 是全限定名吗(如包+类名)?
    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多