Вопрос кажется очевидным, но реализация для меня довольно сложная.
Моя цель — написать скрипт сборки Ant для компиляции некоторых классов, для которых требуются другие классы, сгенерированные обработчиком аннотаций. У меня есть пользовательские аннотации и реализация процессора (унаследованная от класса AbstractProcessor
).
Как я понимаю нужно:
- Скомпилируйте процессор аннотаций
- Запустите компилятор над некоторыми аннотированными классами, чтобы сгенерировать новые.
- Скомпилируйте классы, которые требуют сгенерированных классов
Код (шаг 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 для реализации процессора аннотаций. Останавливается на 2-й задаче.
Муравей говорит: Annotation processing without compilation requested but no processors were found.
Что я делаю неправильно? Может быть, мне следует поместить класс процессора аннотаций в .jar
? Или указать имя файла с расширением .class в качестве аргумента -processorpath
? Пробовал несколько вариантов, но ничего не помогает..
Примечания:
Я использую ant javac
задачу вместо apt
one, потому что документация утверждает, что инструмент apt, а также com.sun.mirror
API устарели. Я также просмотрел этот вопрос, но информации нет как правильно скомпилировать процессор.
Я использую:
- Ява 1.6
- Муравей 1.8.2