Mavenでビルドプロセスを高速化する

おそらくあなたの多くはMavenで作業しています。 そうだとすれば、特に開発の活発な段階にあり、変更が多くの​​モジュールに影響を及ぼしている場合は特に、各自がプロジェクトを1日に数回収集すると思われます。 ある時点で、プロジェクトは非常に大きくなり、ビルドは毎日ますます長くなり始めます...そして今、それについて何かをする時が来ました。



Maven 2からMaven 3に移行する


まだmaven2を使用していますか? 変です。 バージョン3のみに移行すると、ビルドプロセスを大幅に高速化できます。 私のプロジェクトでは、Maven 3に切り替えるとビルド速度が10%向上しました。 おそらく、新しいバージョンで行われた何らかの修正と最適化が原因です(開発者によると、コードの量が大幅に削減され、大幅にリファクタリングされたため)。 移行には数分かかり、ほとんどの場合、痛みはありません。 ただし、一部の構成ファイルを修正する必要がある可能性があります。



カーネルと追加のフローを使用します


Maven 3には素晴らしいオプションがあります:

mvn -T 4 clean intall mvn -T 2C clean install
      
      





最初のケースでは、4つのスレッドでアセンブリプロセスを開始することを明示的に示します。 2番目のケースでは、アセンブリプロセスの各コアに2つのスレッドを割り当てる必要があることを示しています。 これは、新しいMavenの新機能の1つであるParallel Buildsです。 この機能は、プロジェクトの依存関係グラフを分析します。

また、モジュールをさまざまなストリームにプッシュし、そのアセンブリを並行して実行できます。

現在のプロジェクトでは、2番目のパラメーター(-T 2C)を使用したビルド速度が20%加速されました。 確かに、1つの欠点があります。 ビルドに消費されるリソースの量は大幅に増加する可能性があります。 私の場合、これは消費されるメモリの+ 30%です。

プロジェクトのモジュールの接続性が非常に低い場合-すぐに注意を払いたい

このオプションを使用すると、ビルド速度が1桁速くなります。

ちなみに、これはプロジェクトアーキテクチャについて考える機会です。 結局、ビルドに時間がかかる場合は、少しリファクタリングすることでこの数字を減らすことができます。 もちろん、これはすべて非常に個人的なものです。

一般的に、開発者によると、アセンブリ速度の向上は20〜50%になる可能性があります。



分割して征服する


さて、バナリティーと言いますが、完全なプロジェクトがある場合は、それを論理的なモジュールに分割することをお勧めします。 分裂はそれ自体で終わりになるべきではありません。 しかし、分割が大きく、依存性が少ないほど、アセンブリプロセスは高速になります。 モジュールによるテストの配布も生産性を向上させ、原則として便利です。



mvnsh


Mavenシェルは、本質的にはアクティブなmavenコマンドラインです。 全体としては、メモリ内で常にハングしているため、新しいビルドごとに新しいJVMで実行する必要はありません。 さらに、すべての構成ファイルがキャッシュされ、すべてのプラグインが既にプリロードされています。 詳細はこちらこちらをご覧ください



プラグイン


余分なプラグインを使用せず、プラグインなしでできる追加のプラグインを使用しないでください。 Mavenはエコシステム全体であるため、このシステムのすべての要素が全体的なパフォーマンスに影響することを理解することが重要です。

また、「-T」パラメーターを使用したビルド中に、実行ログで次のようなものを見つけることができることにも言及する価値があります。

 [WARNING] ***************************************************************** [WARNING] * Your build is requesting parallel execution, but project * [WARNING] * contains the following plugin(s) that are not marked as * [WARNING] * @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 eridanus-supervoid-module: [WARNING] org.codehaus.mojo:jboss-maven-plugin:1.5.0
      
      





したがって、実際には、プラグインはスレッドセーフである可能性が高いため、最新バージョンのプラグインを使用することをお勧めします。 ご存知のように、プラグインがスレッドセーフでない場合、-Tオプションを使用してすべてのタスクをスレッド間で分散することはできません。



アセンブリの高速化に役立つ追加情報に感謝します。



All Articles