如何用Ant编译注释处理器?

ivs*_*tas 8 java ant apt annotations build

问题似乎很明显,但实施对我来说非常困难.

我的目标是编写Ant构建脚本编译一些需要 Annotation Processor 生成另一个类的类.我有一个自定义注释和它的处理器实现(继承自AbstractProcessor类).

据我所知,我需要:

  1. 编译注释处理器
  2. 在一些带注释的类上运行编译器以生成新的类.
  3. 编译需要生成的类的类

代码(第1步和第2步):


<target name="compileAnnotationProcessor">        
    <javac destdir="${OUTPUT_DIR}"
           debug="true"
           failonerror="true"
           includeantruntime="false"
           classpath="${java.class.path}">
        <src>
            <pathelement path="${PROJECT_DIR}/tools/src"/>
        </src>

        <include name="/path/to/annotation/processor/package/**"/>
    </javac>
</target>

<target name="generateFilesWithAPT" depends="compileAnnotationProcessor">
    <javac destdir="${OUTPUT_DIR}"
           includeantruntime="false"
           listfiles="false"
           fork="true"
           debug="true"
           verbose="true">
        <src>
            <pathelement path="${PROJECT_DIR}/common/src/"/>
        </src>
        <include name="/path/to/files/to/compile/**"/>
        <classpath>
            <pathelement path="${OUTPUT_DIR}"/>
            <pathelement path="${java.class.path}"/>
        </classpath>

        <compilerarg line="-proc:only"/>
        <compilerarg line="-processorpath ${OUTPUT_DIR}/path/to/annotation/processor/package/annProcessorImplement"/>
    </javac>
</target>
Run Code Online (Sandbox Code Playgroud)

实际上,第一个任务是执行良好并编译注释处理器实现的.class文件.它停在第二个任务.

Ant说: Annotation processing without compilation requested but no processors were found.

我究竟做错了什么?也许我应该把注释处理器类放在一个.jar?或者提供带.class扩展名的文件名作为-processorpath参数?我尝试了几个选项但没有任何帮助..


笔记:

我使用的是ant javac任务而不是apt一个,因为文档声称apt工具和com.sun.mirrorAPI已被弃用.我也查看了这个问题,但没有关于如何正确编译处理器的信息.

我正在使用:

  • Java 1.6
  • Ant 1.8.2

Puc*_*uce 4

我通常的做法是:

  • 将注释与注释处理器一起打包在自己的 jar 中
  • 通过该 jar 中的 META-INF/services 注册注释处理器

然后,只要您依赖注释,注释处理器就会自动选取,无需任何额外配置。

  • 如果通过 META-INF/services 注册处理器,则不需要指定 handlerpath 参数。Javac 会自动拾取它。 (3认同)