maven-compiler-plugin
コードで注釈処理を実行するために Maven プロジェクトで使用しています。<fork>true</fork>
構成オプションを追加するまでは機能していました。
pom.xmlファイルには以下が含まれます。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<dependencies>
<!-- Add dependency on the annotation processor -->
<dependency>
<groupId>x.y.z</groupId>
<artifactId>my-processor</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
my-processor-1.0.jarファイルにはMETA -INF/services/javax.annotation.processing.Processorjavac
ファイルが含まれているため、実行時にコンパイラによって検出されます。
この構成でmvn clean compileを実行すると、予想どおり、注釈プロセッサが実行され、生成されたコードがtarget\generated-sources\annotationsディレクトリに配置されることがわかります。
しかし<fork>true</fork>
、プラグイン構成にオプションを追加すると、注釈プロセッサが実行されず、target\generated-sources\annotationsディレクトリにコードが存在しないことがわかります。
maven-compiler-plugin
バージョン 2.5.1、3.0、および 3.1 でこれを試しました (3.x バージョン<forceJavaCompilerUser>true</forceJavaCompilerUser>
では、注釈プロセッサ jar が検出されるように構成にオプションを追加する必要がありました)。
また、アノテーション プロセッサを明示的に指定してみました。
<configuration>
...
<annotationProcessors>
<annotationProcessor>x.y.z.MyProcessor</annotationProcessor>
</annotationProcessors>
...
</configuration>
繰り返しになりますが、バージョン 2.5.1、3.0、および 3.1 では、構成オプションでフォークが指定されていない場合、アノテーション プロセッサが呼び出されます。オプションが指定されている場合<fork>true</fork>
、注釈プロセッサは実行されません。
また、アノテーション プロセッサの依存関係が確実に読み込まれるようにx.y.z:my_processor
、依存関係の外に依存関係を追加しました。maven-compiler-plugin
maven-compiler-plugin
が で設定されている場合でも注釈処理は機能し<fork>true</fork>
ますか? それとも、プラグインの設定が間違っていますか?
コンパイルを別々の実行に分割したくないことに注意してください (たとえば、 を使用して注釈処理なしでコンパイルする実行と、 を使用<fork>true</fork>
して注釈処理のみを行う別の実行<fork>false</fork>
。これを回避する方法がない限り、何千ものソース ファイルを処理する必要があります)。
JDK 1.7.0_45 を使用しています。
編集#1
実際の解決策は、プロセッサの依存関係をプラグインの依存関係から通常の依存関係に移動することでした。
<dependencies>
<dependency>
<groupId>x.y.z</groupId>
<artifactId>my-processor</artifactId>
</dependency>
...
</dependencies>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
</configuration>
</plugin>
</plugin>
これをテストしたと思っていましたが、生成されたコードの存在を探すのではなく、コンソール出力 (プロセスがフォークされたときに表示されない) を探していたのかもしれません。