マルチコア/マルチCPUマシンでMavenを使用してビルドする場合、異なるサブプロジェクトを並行してビルドできることがよくあります。これをmavenで行う方法はありますか?これ/何のためのプラグインはありますか?
マルチコア/マルチCPUマシンでMavenを使用してビルドする場合、異なるサブプロジェクトを並行してビルドできることがよくあります。これをmavenで行う方法はありますか?これ/何のためのプラグインはありますか?
回答:
Maven 3(ベータ1以降)は、実験的機能として並列ビルドをサポートするようになりました。
例えば、
mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core
完全なドキュメントはMaven wikiにあります。
https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3
提案された解決策は素晴らしいですが、並列ビルド中のテストの安定性に関するここでの答えに何かを追加したいと思いました。
したがって、Maven並列ビルドを使用する場合:
mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core
テストに関するいくつかの問題が発生する可能性があります。シリアルテストとパラレルテストの実行で異なるテストの動作に注意してください。それが発生するほとんどの場合、リソースごとに不適切なテスト分離が行われます。
たとえば、test1はハードコーディングされたキー12345でdbエントリを操作し、test2は同じエントリを使用します。それは良くありません...
これはそもそも考慮すべき状況ですが、忘れられて、並列Mavenビルドに切り替えた後で別の問題が発生する可能性があります。
その場合でも、少なくともいくつかの状況で並列実行を使用したい場合は、(もちろん、テストを修正して適切に分離する以外に)-DskipTests引数を使用してMavenテストの実行を無効にすることができます。
mvn clean install -T 4 -DskipTests
一部のCIビルドアプリケーション(ハドソンなど)は、同時に(さらには複数のマシン上で)複数のMavenプロジェクトをビルドできます。
Mavenの「スタンドアロン」でこれをサポートすることもできます。Mavenの問題トラッカーをざっと見てみると、次のようになります。http://jira.codehaus.org/browse/MNG-3004