Maven 公式発表: Maven と Gradle を殺してください! より強力で、より高速で、より素晴らしい新世代の構築ツールを紹介します。バースト!

記事のソース: https://blog.csdn.net/weixin_48321993/article/details/125979820

目次

  • 1. はじめに

  • 2. インストール

  • 3. 使用する

  • 4. まとめ

d6bb06878f60d1e03a40ff38d0471750.gif

序文

Java 開発者であれば、Maven の遅いコンパイルにはもううんざりしていると思いますが、これまでの負担や使用習慣、その他の問題により、当面は他の高速ビルド ツールに切り替えることができません。より高速な Maven へ — maven-mvnd。


1. はじめに

maven-mvnd は、Apache Maven チームが Gradle とTakari を借用して派生した、より高速なビルド ツールです。Mvnd には Maven が組み込まれており、Maven を mvnd にシームレスに切り替えることができるのはこのためです (Maven を別途インストールする必要はありません)。

設計の観点からは、mvnd で 1 つ以上のデーモン プロセスが生成され、ビルド リクエストを処理して並列ビルドの効果を実現します。さらに、VM の選択において、mvnd は従来の JVM を置き換える GraalVM を使用しており、それに比べて GraalVM は起動が速く、メモリの使用量も少なくなります。

ドキュメントによると、mvnd には従来の Maven に比べて次の利点があります。

  • ビルドを実行している JVM をビルドごとに再起動する必要はありません。

  • Maven プラグイン クラスのクラス ローダーは複数のビルドにわたってキャッシュされ、プラグイン jar は 1 回だけ読み取られて解析されます。

  • JVM 内の JIT によって生成されたネイティブ コードは保存されます。JIT コンパイルは Maven に比べて時間がかかりません。ビルドを繰り返すと、JIT に最適化されたコードがすぐに利用可能になります。これは、Maven プラグインと Maven Core のコードだけでなく、JDK 自体のすべてのコードにも当てはまります。

デフォルトでは、mvnd は複数の CPU コアを使用してモジュールを並行してビルドします。使用されるコアの数は、Math.max(Runtime.getRuntime().availableProcessors() - 1, 1) の式で求められます。ソース ツリーが並列ビルドをサポートしていない場合は、コマンド ラインで -T1 を渡してビルドをシリアルにします。

同時に、関係者は 24 コア マシンでの動作の動的な図を示しました。

716646861159a50ec566651cd22892a7.gif


2. インストール

mvnd のインストールについては、公式ドキュメントに非常に詳細なチュートリアルが記載されています。最初に読むことをお勧めします: https://github.com/apache/maven-mvnd。

著者は Homebrew を通じてインストールしましたが、macOS m1 のインストールと使用に問題がないことが実際に証明されました。ただし、この方法でインストールされた mvnd のバージョンは 0.7.1 であることに注意してください。ubuntu と macOS m1 でテストした結果、このバージョンは JDK8 をサポートしていないことがわかりました (おそらく、作者のコンピューターだけの問題かもしれません)。 , しかし、公式の例にあるように、JDK11 は確かに問題ありません。JDK8 で mvnd コマンドを実行すると、次のエラーが生成されます。

~ % mvnd -v
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/mvndaemon/mvnd/client/DefaultClient has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:352)

この方法でダウンロードされた実行可能ファイルは、JDK の上位バージョンでコンパイルされていると推定されますが、いくつかのメソッドや機能が欠けているため、下位バージョンでは実行できません。途方に暮れていたところ、著者は maven-mvnd の最新バージョンの更新手順にある「Closed issues: Different java version for mvnd and maven #512」を見つけ、この問題に対する解決策として、指定されたバージョンを設定することを提案してくれました。 JAVA_HOME によって JDK11 に設定し、mvnd コマンドの実行時にパラメーター -Dmaven.compiler.release=8 を追加します。

mvnd -Dmaven.compiler.release=8 compile

このようにして、JDK8に対応したコンパイルコードを生成することができます。

問題 #512 について、作成者は、mvnd のサポートされる最小バージョンは JDK8 であると回答しましたが、0.5.2 から試し始めましたが、依然として同じエラーが報告されました。おそらく、作成者のコンピュータに何らかの問題があるのか​​もしれません。他の人の投稿を見た結果のグラフは、JDK8 の最新バージョンもインストールして使用できることを示しています。また、それでも動作しない場合は、公式の Readme に具体的な手順が記載されているので、ソースコードを手動でコンパイルして実行ファイルを生成することも可能です。


3. 使用する

使い方はMavenと全く同じで、コマンドmvnをmvndに変えるだけです。筆者のマシンの実測では、従来の Maven と比較して、mvnd によるビルドにかかる時間は 1/2 になりました。


4. まとめ

この記事の著者は、maven-mvnd の導入、インストール、使用方法、およびいくつかの異常事態から始まりますが、さらに詳しく知りたい場合は、公式ドキュメントを読むことができます。そしておそらく、強化された Maven はまだ Gradle ほど優れていないかもしれませんが、Maven のこの強化は、歴史的な負担と使用習慣を背景に依然として非常に香りが強いです。

おすすめ

転載: blog.csdn.net/g6U8W7p06dCO99fQ3/article/details/131255318