La domanda sembra ovvia, ma l'implementazione è piuttosto difficile per me.Come compilare il processore di annotazione con Ant?
Il mio obiettivo è quello di scrivere script di build Ant a compilare alcune classi che richiedono un altro classi generate dal processore annotazione. Ho annotazioni personalizzate ed è l'implementazione del processore (ereditata dalla classe AbstractProcessor
).
A quanto ho capito ho bisogno di:
- Compilare l'Annotazione processore
- eseguire il compilatore su alcune classi annotate per generare quelle nuove.
- compila la classi che richiedono classi
Il codice (passaggio 1 & 2) generati:
<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>
In realtà, il primo compito sta eseguendo bene e compila il. file di classe per l'implementazione del processore Annotation. Si sta fermando al 2 ° compito.
Ant dice: Annotation processing without compilation requested but no processors were found.
Che cosa sto facendo di sbagliato? Forse dovrei mettere la classe del processore di annotazione in un .jar
? Oppure fornire un nome file con estensione .class come argomento -processorpath
? Ho provato diverse opzioni, ma niente aiuta ..
Note:
che sto usando formica javac
compito invece di apt
uno perché documentation affermazioni che strumento apt così come com.sun.mirror
API è deprecato. Ho anche guardato attraverso questo question, ma non ci sono informazioni su come compilare il processore nel modo giusto.
sto usando:
- Java 1.6
- Ant 1.8.2
E 'possibile fare lo stesso senza posizionare il processore di annotazione (più l'annotazione) nel.vaso? – ivstas
Almeno il processore di annotazione di solito dovrebbe trovarsi in un vaso diverso rispetto alle classi, che sono annotate con la propria annotazione, poiché l'elaborazione delle annotazioni deve essere disabilitata durante la compilazione dei processori di annotazione. Puoi avere le annotazioni e i processori di annotazione in due vasi separati, ma devi dichiarare una dipendenza da entrambi per elaborare le annotazioni, il che è meno comodo nella maggior parte dei casi, penso. – Puce
Per essere chiari, non intendo che il jar debba contenere solo annotazioni e processori di annotazione, ma non dovrebbe contenere alcuna classe che deve essere elaborata da un processore di annotazione. – Puce