maven2コンパイラカスタム実行ソースディレクトリとターゲットディレクトリ
-
16-09-2019 - |
質問
Mavenコンパイラプラグインを別のフェーズで実行し、SRC/Main/JavaおよびSRC/Test/Java以外のディレクトリからのコードを使用できるように、異なるSourcedirectoriesとDestinationDirectoriesを使用します。
ソリューションは以下のように見えると思いました。そこでは、それをリンクしていたフェーズIが統合前のテストでした。ただし、TestSourcedirectoryおよびtestOutputDirectoryのプロパティは、POMのセクションと同様に、この方法で指定されていないようです。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>compile mytests</id>
<goals>
<goal>testCompile</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<testSourceDirectory>${basedir}/src/inttest/java</testSourceDirectory>
<testOutputDirectory>${basedir}/target/inttest-classes</testOutputDirectory>
</configuration>
</execution>
</executions>
</plugin>
このプラグインを取得して、デフォルトの操作に影響を与えることなく、さまざまなフェーズでさまざまなディレクトリをコンパイルする方法はありますか?
解決
ソースディレクトリは、内部のコンパイラプラギンの外側に設定されていますu003Cbuild>要素なので、これは機能しません。
Build-Helper-Maven-Plugin'sを使用できます 追加ソース と アドテストソース 統合テストに追加のソースディレクトリを指定するには、これは いいえ 既存のソース監督を削除します。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-it-source</id>
<phase>pre-integration-test</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/src/inttest/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
あなたがバインドする場合 アドテストソース 直前に走ることを目標 テストコンパイル 目標、統合テストが含まれます。 SureFireプラグインがそれらを見つけるように、それらをターゲット/テストクラスに出力したいことに注意してください。
標準のテストソースの削除を処理するために、統合テスト用の場所を追加する前に、既存のテストソースの場所を削除するモデルを変更する小さなプラグインを書きました。
他のヒント
より多くの研究の後、これは私が望むようにMaven 2では実際には不可能であることが明らかであることが明らかであり、統合テストを導入するために何らかの形のハックが必要です。追加のディレクトリを追加することはできますが(Rich Sellerが提案しているように)、他のソースを削除したり、メインコンピレーションとは別にディレクトリをコンパイルするプラグインはありません。
統合テストを追加するために見つけた最良のソリューションは、最初にビルドヘルパープラグインを使用して、テストとしてコンパイルするディレクトリInttestディレクトリを追加することです。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/inttest/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
統合テストを取得して統合テストフェーズで実行するために、除外を使用する必要があり、以下のように実行されたときに操作する必要があります。これにより、必要なカスタムパラメーターが可能になります(私の場合、Arglineを介してエージェントが追加されています)。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/itest/**</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>inttests</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes><exclude>none</exclude></excludes>
<includes>
<include>**/itest/**/*Test.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>