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

时间:2012-10-12 08:33:45

标签: java ant build annotations apt

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

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

据我所知,我需要:

  1. 编译注释处理器
  2. 在一些带注释的类上运行编译器以生成新的。
  3. 编译需要生成类的类
  4. 代码(步骤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>
    

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

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

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


    注意:

    我正在使用ant javac任务而不是apt,因为documentation声称不推荐使用apt工具和com.sun.mirror API。 我也查看了这个question,但是没有关于如何正确编译处理器的信息。

    我正在使用:

    • Java 1.6
    • Ant 1.8.2

1 个答案:

答案 0 :(得分:4)

我通常的做法是:

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

然后,只要您对注释有所依赖,就会自动选择注释处理器而无需任何其他配置。