La pregunta parece ser obvia, pero la implementación es bastante difícil para mí.¿Cómo compilar el procesador de anotación con Ant?
Mi objetivo es escribir Ant script de construcción a compilar algunas clases que requieren otras clases generadas por procesador de anotación. Tengo anotaciones personalizadas y su implementación de procesador (heredada de la clase AbstractProcessor
).
Como entiendo que tienen que:
- Compila el procesador de anotación
- ejecutar el compilador sobre algunas clases anotadas para generar los nuevos.
- compilar el clases que requieren clases
El código (paso 1 & 2) generado:
<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>
En realidad, la primera tarea es realizar buenas y compila el. archivo de clase para la implementación del procesador de anotación. Se está deteniendo en la 2da tarea.
Ant dice: Annotation processing without compilation requested but no processors were found.
¿Qué estoy haciendo mal? Tal vez debería poner la clase de procesador de anotación en un .jar
? O proporcione un nombre de archivo con extensión .class como argumento -processorpath
? He intentado varias opciones, pero nada ayuda ..
Notas:
estoy usando tarea ant javac
en lugar de uno, porque apt
documentation reclamaciones que herramienta apt, así como com.sun.mirror
API está en desuso. También he consultado este question, pero no hay información sobre cómo compilar el procesador de la manera correcta.
que estoy usando:
- Java 1.6
- Ant 1.8.2
Es posible hacer lo mismo sin colocar el procesador de anotación (más la anotación) en el.¿tarro? – ivstas
Bueno, al menos el procesador de anotaciones normalmente debe estar en un contenedor diferente al de las clases, que se anotan con su anotación, ya que el proceso de anotación debe deshabilitarse al compilar procesadores de anotación. Puede tener las anotaciones y los procesadores de anotación en dos jarras separadas, pero luego debe declarar una dependencia en ambos para procesar las anotaciones, lo cual es menos cómodo en la mayoría de los casos, creo. – Puce
Para ser claros, no me refiero a que el contenedor solo contenga anotaciones y procesadores de anotaciones, pero no debe contener ninguna clase que deba procesarse con un procesador de anotaciones. – Puce