web-dev-qa-db-ja.com

Mavenのビルドを高速化する方法は?

マルチモジュールがありますJavaプロジェクト。Mavenはビルドに約40秒かかります。スレッドとコアの数に-Tおよび-C argsを指定して、マルチスレッドビルドでもMavenを試しました。しかし、ビルドのウォールタイムに大きな改善は見られませんでした。
maven 3.2.3を使用していますが、時々非常に頻繁にプロジェクトをビルドする必要があります。
クリーンな目標には時間がかかることは知っていますが、省略できません。
提案してください...

編集:
注:私の場合、クリーンアップにはそれほど時間はかかりません。 1秒で終了します。インストールには時間がかかります。

33

注:最初に知っておきたいのは、ここにあるすべての回答を除いて、Mavenで利用可能な組み込みオプションは他にないことです。


複数のスレッドでmavenビルドを実行すると、ビルドを高速化できます。例えば ​​:

mvn clean install -T100

-Tは、ハードウェアに基づいて必要なスレッド数を指定するためのものです。

以下はwikiの亜種です

Maven 3.xには、並列ビルドを実行する機能があります。コマンドは次のとおりです。

  • mvn -T 4スレッドを使用した4つのクリーンインストールビルド
  • mvn -T 1C CPUコアごとに1つのスレッドをクリーンインストール
  • mvn -T 1.5C CPUコアあたり1.5スレッドのクリーンインストール

実行の評価方法( Maven 3の並列ビルドを参照 )?

enter image description here

グラフ内の各ノードは、マルチモジュールビルドのモジュールを表します。「レベル」は、内部リアクター依存関係グラフの最初のモジュールまでの距離を示しています。 Mavenは、マルチモジュールビルドの宣言されたモジュール間依存関係に基づいてこのグラフを計算します。親のMavenプロジェクトも依存関係であることに注意してください。これは、ほとんどのプロジェクトグラフの上に単一のノードがある理由を説明しています。リアクターの外側の依存関係は、このグラフに影響しません。

最後に、テストの実行をスキップする場合は、-DskipTestsも同様です。

注意:一部のプラグインはマルチスレッドビルダーと互換性がない場合があり、動作する場合があります。ただし、以下の警告メッセージが表示されます。マルチスレッドのサポートについては、プラグインのドキュメントをご覧ください。

[WARNING] *****************************************************************                                                                                                                                 
[WARNING] * Your build is requesting parallel execution, but project      *                                                                                                                                 
[WARNING] * contains the following plugin(s) that have goals not marked   *                                                                                                                                 
[WARNING] * as @threadSafe to support parallel building.                  *                                                                                                                                 
[WARNING] * While this /may/ work fine, please look for plugin updates    *                                                                                                                                 
[WARNING] * and/or request plugins be made thread-safe.                   *                                                                                                                                 
[WARNING] * If reporting an issue, report it against the plugin in        *                                                                                                                                 
[WARNING] * question, not against maven-core                              *                                                                                                                                 
[WARNING] *****************************************************************                                                                                                                                 
[WARNING] The following plugins are not marked @threadSafe in test-project:                                                                                                                          
[WARNING] de.dentrassi.maven:rpm:0.9.2                                                                                                                                                                      
[WARNING] Enable debug to see more precisely which goals are not marked @threadSafe.                                                                                                                        
[WARNING] *****************************************************************    
31
Ram Ghadiyaram

以下のような小さな2のトリックを使用して、ビルドを最適化できます。

  1. Junit Testを作成していて、-DskipTests=trueを使用できるたびにテストケースを実行したくない場合
  2. Nexusまたはリポジトリをローカルにインストールする
  3. たとえば、メモリ構成を最適に調整できます。この行をmvn.bat set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256mに追加します

詳細については、 Mavenビルドを高速化する方法 を確認してください。

4
Subodh Joshi

コマンドラインを使用する場合、マシンのコア数を確認し、それらすべてを使用できます。テストをスキップする場合は、-DskipTestsたとえば、8コアプロセッサがあります。

mvn -T 8C clean install -DskipTests
4
ccreedon1

あなたが余分なRAMを持っているなら、あなたはハックな方法を行うことができます。そして、SSDは必要ありません。少し無効にします(MacOS-Winに同様の問題があるかどうか覚えていません)。

1)RAMドライブ(作成方法はOSによって異なります)を作成し、/ Users/Username/volatileフォルダーにマウントします)

2)MVN_HOME/libでmaven-module-builder-X.X.X.jarを見つけます

3)JARで、ファイルorg/Apache/maven/model/pom-4.0.0.xmlを変更して変更します

<ビルド> <ディレクトリ>/Users/Username/volatile/$ {project.groupId}/$ {project.artifactId}/$ {project.version}/target

4)これ以降、すべてのプロジェクトのコンパイルはメモリ内で行われます。また、SSDと比較しても違いがあります。

はい、そのハックと一部のMavenプラグインは、BTWの動作を停止する可能性があります。

3
Vladimir I

私の実際のプロジェクトでは:

1/mvn clean install [情報]合計時間:01:05時間

2/mvn clean install -DskipTests [情報]合計時間:18:35分

3/mvn clean install -Dmaven.test.skip -DskipTests [情報]合計時間:10:58分

4/mvn -T 1C clean install -Dmaven.test.skip -DskipTests
[INFO]合計時間:04:00分

2
mourad m

多くの人が既に言及している並列実行とは別に、ビルド-XX:+ TieredCompilation -XX:TieredStopAtLevel = 1を高速化するこれらのMavenオプションを試してください。

0
user1416932