Настройка созданного исходного каталога для процессоров аннотаций в Maven
Я пытаюсь переместить сборку, которая генерирует источники, используя процессор аннотаций, в Maven. Я попытался настроить maven-compiler-plugin следующим образом:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<fork>true</fork>
<compilerArgument>-s ${project.build.directory}/target/generated-sources/annotation-processing</compilerArgument>
</configuration>
</plugin>
</plugins>
но javac терпит неудачу с
[INFO] Compilation failure
Failure executing javac, but could not parse the error:
javac: invalid flag: -s /home/robert/workspaces/betbrain/sportsengine.common/sportsengine.bean.test/target/target/generated-sources/annotation-processing
Usage: javac <options> <source files>
use -help for a list of possible options
насколько я могу судить,- s должен быть передан до исходных файлов javac, но maven передает его после.
как я могу пройти -s
флаг правильно для maven-compiler-plugin?
обновление: в мавен-аннотации-плагин не работает.
при настройке как
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<outputDirectory>${generated.sources.directory}</outputDirectory>
<processors>
<processor>xxx.annotation.EnforceJavaBeansConventionsProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
</plugin>
выполнение завершается с
[INFO] [processor:process {execution: process}]
error: Annotation processor 'xxx.annotation.EnforceJavaBeansConventionsProcessor' not found
1 error
7 ответов
плагин использовал разделитель пути к классам harcoded Windows для создания пути к классам, поэтому он не работал на моей машине Linux.
представлены патчи:
Не совсем ответ на ваш вопрос, но интереса:
http://jira.codehaus.org/browse/MCOMPILER-75
Я боюсь, что есть ряд проблем с использованием JSR 269 в Maven, по крайней мере, с плагином компилятора по умолчанию.
я, возможно, что-то упускаю, но вы не должны:
генерировать источники в
target/generated-sources/annotation-processing
во времяgenerate-sources
этап? The apt-maven-plugin или мавен-аннотации-плагин могу помочь.включить сгенерированные источники при компиляции источников в
target/classes
используя<includes>
на maven-компилятор-плагин или maven-build-helper-плагин?
EDIT: где xxx.annotation.EnforceJavaBeansConventionsProcessor
расположены? Не нужно добавлять dependencies
к конфигурации Maven-аннотации-плагина, как описано в использование страница?
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<outputDirectory>src/main/generated</outputDirectory><!-- PROCESSOR OUT DIR -->
<processors><!-- LIST OF PROCESSOR CLASS(S) -->
<processor>org.bsc.apt.BeanInfoAnnotationProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
<dependencies/><!-- ADD DEPENDENCIES HERE IF REQUIRED -->
</plugin>
PS: я бы не использовал src/main/generated
как выходной каталог, а скорее подкаталог target/generated-sources
.
одной из причин этого может быть то, что $JAVA_HOME указывает на версию JDK 1.5 вместо 1.6. (в windows проверьте %JAVA_HOME% конечно)
у меня такая же проблема ...
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
javac: invalid flag: -s
...
вы используете java 5 ?
$ mvn -version
Apache Maven 2.2.1 (rdebian-8)
Java version: 1.5.0_22
Java home: /usr/lib/jvm/java-1.5.0-sun-1.5.0.22/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "3.2.0-24-generic" arch: "amd64" Family: "unix"
$ which java
/usr/bin/java
$ ll /usr/bin/java
/usr/bin/java -> /etc/alternatives/java*
$ ll /etc/alternatives/java
/etc/alternatives/java -> /usr/lib/jvm/java-1.5.0-sun/jre/bin/java*
$ sudo update-alternatives --config java
$ mvn -version
Apache Maven 2.2.1 (rdebian-8)
Java version: 1.6.0_24
Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "3.2.0-24-generic" arch: "amd64" Family: "unix"
Теперь mvn установить должно работать :-)
Я использую maven-processor-plugin
следующим образом:
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>process-my-annotations</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-test-sources</phase>
<configuration>
<processors>
<processor>x.y.z.MyAnnotationProcessor</processor>
</processors>
<outputDirectory>${project.build.directory}/generated-test-sources/test-annotations</outputDirectory>
<outputClassDirectory>${project.build.directory}/test-classes</outputClassDirectory>
</configuration>
</execution>
</executions>
</plugin>
сгенерированный код переходит в target / generated-test-sources / test-аннотации, и генерируемые ресурсы в целевой/тест-классы (по умолчанию для
У меня была эта проблема с источником GWTP, генерирующим аннотации обработки APT
Это было потому, что я не установил версию для плагина компилятора, моя окончательная настройка:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<!-- <compilerArgument>-proc:none</compilerArgument> -->
<generatedSourcesDirectory>${generated.sources}</generatedSourcesDirectory>
<annotationProcessors>
<annotationProcessor>com.gwtplatform.dispatch.annotation.processor.GenEventProcessor</annotationProcessor>
<annotationProcessor>com.gwtplatform.dispatch.annotation.processor.GenDtoProcessor</annotationProcessor>
<annotationProcessor>com.gwtplatform.dispatch.annotation.processor.GenDispatchProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</plugin>