Pytanie wydaje się być oczywiste, ale wdrożenie jest dla mnie dość trudne.Jak skompilować procesor adnotacji za pomocą Ant?
Moim celem jest napisanie Ant zbudować skrypt do kompilowania niektórych klas, które wymagają kolejnych klas generowane przez procesor adnotacji. Mam niestandardowe adnotacje i implementację procesora (odziedziczoną po klasie AbstractProcessor
).
Jak rozumiem muszę:
- Kompilacja procesor adnotacji
- uruchomić kompilator nad jakimiś adnotacjami klas do generowania nowych.
- kompilacji klas, które wymagają wygenerowanych klas
kod (etap 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>
Faktycznie, pierwszym zadaniem jest wykonywanie dobry i kompiluje. plik klasy dla implementacji procesora adnotacji. Zatrzymuje się przy drugim zadaniu.
Ant mówi: Annotation processing without compilation requested but no processors were found.
Co robię źle? Może powinienem umieścić klasy procesorów adnotacji w .jar
? Lub podać nazwę pliku z rozszerzeniem .class jako argumentem -processorpath
? Próbowałem kilka opcji, ale nic nie pomaga ..
Uwagi:
Używam mrówka javac
zadanie zamiast apt
jeden bo documentation twierdzi, że apt narzędzie jak com.sun.mirror
API jest przestarzała. Przejrzałem także ten question, ale nie ma informacji, jak skompilować procesor we właściwy sposób.
Używam:
- Java 1.6
- Ant 1.8.2
Czy można to zrobić bez umieszczania procesora adnotacji (plus adnotacji) w pliku.słoik? – ivstas
Cóż, przynajmniej procesor adnotacji powinien zwykle znajdować się w innym słoiku niż klasy, które są opatrzone adnotacją, ponieważ przetwarzanie adnotacji musi być wyłączone podczas kompilowania procesorów adnotacji. Adnotacje i procesory adnotacji możesz umieszczać w dwóch oddzielnych słoikach, ale musisz zadeklarować zależność od nich, aby przetwarzać adnotacje, co w większości przypadków jest mniej wygodne. – Puce
Aby było jasne, nie mam na myśli, że słoik powinien zawierać tylko adnotacje i procesory adnotacji, ale nie powinien zawierać żadnych klas, które muszą być przetwarzane przez procesor adnotacji. – Puce