Конфигурация обработки аннотации Java 6 с помощью Ant
У меня есть пользовательская аннотация, и это процессор и процессорFactory. Как настроить файл сборки Ant таким образом, чтобы:
-
Обработчик аннотации применяется к аннотированным классам и генерирует исходные файлы в папке "gen"
-
Сгенерированные исходные файлы (из обработки аннотаций) могут использоваться другими исходными файлами в проекте.
Ответы
Ответ 1
Это не очень, но это то, что я делаю. (Источники javac ant задача страница javac man) Использование атрибут compilerarg, который я могу передать в аргументах обработки обработки аннотаций, которые напрямую не поддерживаются задачей javac ant.
<javac srcdir="${src}" destdir="${classes}" ... >
....
<compilerarg line="-processorpath ${processorpath}"/>
<compilerarg line="-processor ${processor}"/>
<compilerarg line="-s ${whereToPutGeneratedClassFiles}"/>
</javac>
Я не использую инструмент APT, поскольку в документации указано
Обратите внимание, что инструмент Apt кажется нестабильной частью структуры JDK, поэтому может радикально измениться в будущих версиях. В частности, он может быть устаревшим в JDK 6, который может запускать обработчики аннотаций как часть javac.
Если вам действительно не нравятся аргументы компилятора, вы можете использовать свои обработчики комментариев, такие как
<jar destfile="${annotationprocessorjar}" ... >
...
<service type="javax.annotation.processing.Processor" provider="${your.annotation.processor.fully.qualified.name}"/>
</jar>
Затем вы можете сделать
<javac ... make sure ${annotationprocessorjar} is in classpath>
</javac>
Ответ 2
Я нашел некоторые из других примеров немного запутанными из-за того, что некоторые из ключевых битов были необъяснимыми переменными. Вот что я закончил:
чтобы построить процессорную банку:
<target name="build-aux">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
<javac destdir="${build.classes}" source="1.6" target="1.6">
<src path="${src.java}" />
<include name="com/acme/cli/Program.java" />
<include name="com/acme/cli/ProgramProcessor.java" />
</javac>
<jar jarfile="acme-aux.jar" update="true">
<manifest>
<attribute name="Main-Class" value="${main.class}" />
<attribute name="Implementation-Title" value="acme-aux" />
<attribute name="Implementation-Version" value="${version}" />
<attribute name="Implementation-Vendor" value="ACME, Inc" />
<attribute name="Built-By" value="${user.name}" />
<attribute name="Build-Date" value="${TODAY}" />
</manifest>
<fileset dir="${build.classes}">
<!-- the annotation -->
<include name="com/acme/cli/Program.class" />
<!-- the annotation processor -->
<include name="com/acme/cli/ProgramProcessor.class" />
</fileset>
<service type="javax.annotation.processing.Processor"
provider="com.acme.cli.ProgramProcessor" />
</jar>
</target>
затем скомпилировать код и запустить процессор:
<target name="compile" depends="generate,build-aux">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
<javac destdir="${build.classes}" source="1.6" target="1.6">
<src path="${src.java}" />
<include name="com/acme/**/*.java" />
<!-- ensure that "acme-aux.jar" is in this classpath -->
<classpath refid="compile.class.path"/>
<!-- pass option to annotation processor -->
<compilerarg value="-Aacme.version=${version}" />
</javac>
</target>
Ответ 3
Вот как я это сделал в eclipse/ ant:
<javac destdir="bin"
debug="true"
debuglevel="${debuglevel}"
compiler="javac1.6"
srcdir="${src}">
<include name="**/*.java"/> <!-- I just do it this way -->
<classpath refid="classpath_ref_id"/>
<compilerarg value="-processor" />
<compilerarg value="${processor}" />
<compilerarg value="-s" />
<compilerarg value="${gen_src_target}" />
</javac>
Примечания
- Путь процессора включен в * classpath_ref_id *
- Запустите ваш процессор до.
скомпилировать фактический код (с помощью или
без сгенерированного кода).
Ответ 4
вы можете посмотреть инструмент обработки аннотаций
, он автоматически компилирует сгенерированные исходные файлы
//EDIT//
В ответ на ваш комментарий:
Вы можете использовать apt в сочетании с apt ant задача
Но с jdk6 инструмент javac предоставляет прямую поддержку обработки аннотаций, поэтому вы должны иметь возможность использовать задача javac ant с атрибутом компилятора, указанным как "javac1.6"