Настройка созданного исходного каталога для процессоров аннотаций в 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, по крайней мере, с плагином компилятора по умолчанию.


я, возможно, что-то упускаю, но вы не должны:

  1. генерировать источники в target/generated-sources/annotation-processing во время generate-sources этап? The apt-maven-plugin или мавен-аннотации-плагин могу помочь.

  2. включить сгенерированные источники при компиляции источников в 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>