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



这个问题似乎很明显,但实现对我来说相当困难

我的目标是编写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>

实际上,第一个任务执行良好,并为Annotation处理器实现编译.class文件。它在第二个任务处停止。

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

我做错了什么?也许我应该把注释处理器类放在.jar中?或者提供一个扩展名为.class的文件名作为-processorpath参数?我试了几种选择,但都无济于事。。


备注:

我使用antjavac任务而不是apt任务,因为文档声称apt工具和com.sun.mirrorAPI都不推荐使用。我也研究过这个问题,但并没有关于如何以正确的方式编译处理器的信息。

我正在使用:

  • Java 1.6
  • 蚂蚁1.8.2

我通常的方法是:

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

然后,无论您在哪里依赖注释,注释处理器都将自动启动,而无需任何额外配置。

最新更新