web-dev-qa-db-ja.com

Maven:並列ビルドの方法

マルチコア/マルチCPUマシンでMavenを使用してビルドする場合、多くの場合、異なるサブプロジェクトを並行してビルドできます。 Mavenでこれを行う方法はありますか?これ/なんでもプラグインはありますか?

134

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+

204
hallidave

一部のCIビルドアプリケーション(例:hudson)は、複数のMavenプロジェクトを同時に(さらに複数のマシン上でも)ビルドできます。

Maven 'standalone'でのこのサポートもいいでしょう。maven課題トラッカーをざっと見てみると、次のようなことがわかりました。 http://jira.codehaus.org/browse/MNG-3004

12
jor

推奨される解決策は素晴らしいですが、ここでは、並列ビルド中のテストの安定性に関する回答に何かを追加したかったのです

したがって、 Maven parallel build が使用される場合:

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ビルドへの切り替えが行われると、さまざまな問題につながる可能性があります。

それが発生し、少なくともいくつかの機会でまだ並列実行を使用したい場合は、(もちろん、テストを修正して適切に隔離することに加えて) Mavenテスト実行を無効にする -DskipTests引数を使用:

mvn clean install -T 4 -DskipTests
8
Johnny

ビルドサーバーを整理するためにこの質問に来て、mavenをネイティブに扱うものを使用していない場合、探しているマジックフラグは次のとおりです。

-Dmaven.repo.local=someNoneGlobalDir

あなたのビルドのそれぞれに対してそれを行うと、mavenを使用するすべてのものをキューに入れるのではなく、すべてを同時に実行させることができます!

2
JonnyRaa