Maven:並列ビルドを行う方法?


152

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

回答:


228

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


5
1.5スレッドとはどういう意味ですか?シングルコアシステムの場合、それは1スレッドを意味しますが、デュアルコアシステムは3スレッドになりますか?
Saad Malik 14

4
@SaadMalikはい、まさに、デュアルコアで3スレッド、クアッドコアシステムで6スレッドなど
t0r0X 14

JVMに使用できる引数があるので、これをEclipseで使用できますか?
Jason Huntley、2015年

Eclipseサポートは、外部からMavenを呼び出しません。
するThorbjörnRavnアンデルセン

18

提案された解決策は素晴らしいですが、並列ビルド中テストの安定性に関するここでの答えに何かを追加したいと思いました。

したがって、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


12

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

Mavenの「スタンドアロン」でこれをサポートすることもできます。Mavenの問題トラッカーをざっと見てみると、次のようになります。http://jira.codehaus.org/browse/MNG-3004


MNG-3004 JIRAのコメントに示されているように、複数のMavenプロジェクトのHudson機能が同時に壊れていると思います。
Dougnukem 2009

2

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

-Dmaven.repo.local=someNoneGlobalDir

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.