[英]Setting the generated source directory for annotation processors in 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?
更新: maven-annotation-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
不完全是您問題的答案,但很有趣:
https://issues.apache.org/jira/browse/MCOMPILER-75
恐怕在 Maven 中使用 JSR 269 有很多問題,至少在默認編譯器插件中是這樣。
我可能會遺漏一些東西,但你不應該:
在生成源階段在target/generated-sources/annotation-processing
中generate-sources
? apt-maven-plugin或maven-annotation-plugin可以提供幫助。
在maven-compiler-plugin或maven-build-helper-plugin 中使用<includes>
將源編譯為target/classes
時包含生成的源?
編輯: xxx.annotation.EnforceJavaBeansConventionsProcessor
在哪里? 您不需要在使用頁面上記錄的 maven-annotation-plugin 的配置中添加dependencies
嗎?
<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
的子目錄。
我在 GWTP Source Generate APT Processing annotations 遇到了這個問題
那是因為我沒有為編譯器插件設置版本,我的最終設置:
<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>
原因之一可能是 $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 install應該可以工作了:-)
我一直在使用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-annotations ,生成的資源進入target/test-classes (流程目標的默認值分別是target/generated-sources和target/classes )。
我還需要使用maven-build-helper-plugin
將target/generated-test-sources/test-annotations 添加到測試源路徑,以便test-compile階段將編譯生成的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.