Настройка конфигурации обработки аннотации Java 6 для компилятора eclipse с maven
Каков наилучший способ настройки конфигурации компилятора проекта eclipse для аннотационных процессоров Java 6?
Мое решение - настроить файлы org.eclipse.jdt.apt.core.prefs
и factorypath
вручную. Это немного громоздко:
- Ссылка на процессорную банку в файле фабричного пути
- Конфигурирование выходного каталога процессора обработчика eclipse
(org.eclipse.jdt.apt.genSrcDir
в org.eclipse.jdt.apt.core.prefs
)
- Добавить выходной каталог процессора обработчика eclipse в качестве исходной папки
Одна из проблем заключается в том, что сгенерированные источники eclipse будут скомпилированы с помощью maven. Только maven clean compile
является надежным, так как он удаляет исходные файлы, созданные с помощью eclipse. (Исходные файлы, созданные Eclipse и javac, могут быть не синхронизированы.)
Есть ли лучшее решение для настройки maven без генерируемых исходных файлов eclipse в исходном пути maven?
<project>
<properties>
<eclipse.generated.src>${project.build.directory}/eclipse</eclipse.generated.src>
</properties>
<build>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals> <goal>add-source</goal> </goals>
<configuration>
<sources>
<source>${eclipse.generated.src}</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<additionalConfig>
<file> <name>.factorypath</name>
<content><![CDATA[<factorypath>
<factorypathentry kind="VARJAR" id="M2_REPO/processor/processor.jar" enabled="true" runInBatchMode="false"/>
</factorypath>
]]> </content>
</file>
<file>
<name>.settings/org.eclipse.jdt.apt.core.prefs</name>
<content><![CDATA[
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=true
org.eclipse.jdt.apt.genSrcDir=${eclipse.generated.src}
org.eclipse.jdt.apt.reconcileEnabled=true
]]> </content>
</file>
</additionalConfig>
</configuration>
</plugin>
</plugins>
</build>
</project>
Ответы
Ответ 1
Обновление. Вы можете попробовать использовать apt-maven-plugin. В настоящее время он обеспечивает три цели:
Вы можете настроить цели для выполнения как часть своей сборки следующим образом:
<build>
...
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<goals>
<goal>process</goal>
<goal>test-process</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
По умолчанию каталог вывода имеет значение ${project.build.directory}/generated-sources/apt
,
Существует открыть Jira против плагина компилятора, чтобы добавить поддержку APT для Java 6, вы можете пойти и проголосовать за нее, если это то, что вы хотите увидеть в будущих версиях.
Ответ 2
Я использую http://code.google.com/p/maven-annotation-plugin/, который проще настроить. Вы можете использовать его двумя способами:
- генерировать источники во время компиляции (настройка ниже)
- генерировать источники "вручную" на src/main/сгенерированные и сохранять их на SCM
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<compilerArguments>-encoding ${project.build.sourceEncoding}</compilerArguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process-test</id>
<goals>
<goal>process-test</goal>
</goals>
<phase>generate-test-sources</phase>
<configuration>
<compilerArguments>-encoding ${project.build.sourceEncoding}</compilerArguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
<!-- Disable annotation processors during normal compilation -->
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
Ответ 3
В Eclipse Juno есть более простое решение (я не уверен в предыдущих версиях). В настройках/Maven/Обработка аннотаций существует три режима обработки аннотаций. По умолчанию он отключен, но я тестировал оба других варианта и работал как прелесть для меня. Таким образом, вам не нужно настраивать обработку APT для каждого проекта или изменять его pom.xml.