mvnd
- Maven デーモンmvnd
インストール方法mvnd
固有のオプションmvnd
ビルドするmvnd
mvnd
をインストールするこのプロジェクトは、Gradle とTakari で知られている技術を使用して、より高速な Maven ビルドを提供することを目的としています。
アーキテクチャの概要:
mvnd
Maven が組み込まれています (そのため、Maven を個別にインストールする必要はありません)。
実際のビルドは、長時間存続するバックグラウンド プロセス (別名デーモン) 内で行われます。
1 つのデーモン インスタンスは、 mvnd
クライアントからの複数の連続したリクエストを処理できます。
mvnd
クライアントは、GraalVM を使用して構築されたネイティブ実行可能ファイルです。従来の JVM の起動と比較して、起動が速くなり、使用するメモリも少なくなります。
ビルド要求を処理するアイドル状態のデーモンがない場合は、複数のデーモンを並行して生成できます。
このアーキテクチャには次の利点があります。
実際のビルドを実行するための JVM は、ビルドごとに新たに開始する必要はありません。
Maven プラグインのクラスを保持するクラスローダーは、複数のビルドにわたってキャッシュされます。したがって、プラグイン jar は 1 回だけ読み取られて解析されます。 Maven プラグインの SNAPSHOT バージョンはキャッシュされません。
JVM 内の Just-In-Time (JIT) コンパイラーによって生成されたネイティブ コードも保持されます。標準の Maven と比較して、JIT コンパイルにかかる時間が短縮されます。ビルドを繰り返すと、JIT に最適化されたコードがすぐに利用可能になります。これは、Maven プラグインおよび Maven Core からのコードだけでなく、JDK 自体からのすべてのコードにも当てはまります。
mvnd
標準の Maven に加えて次の機能を提供します。
デフォルトでは、 mvnd
複数の CPU コアを使用してモジュールを並行して構築します。使用されるコアの数はMath.max(Runtime.getRuntime().availableProcessors() - 1, 1)
という式で求められます。ソース ツリーが並列ビルドをサポートしていない場合は、コマンド ラインに-T1
渡してビルドをシリアルにします。
コンソール出力の改善: ストック Maven での並列ビルドの出力は理解しにくいと考えられます。したがって、各ビルド スレッドのステータスを別の行に表示する簡略化された非ローリング ビューを実装しました。 24 コアのマシンでは次のようになります。
ビルドが完了すると、完全な Maven 出力がコンソールに転送されます。
mvnd
インストール方法SDKMANなら!あなたのオペレーティングシステムをサポートしているので、それは簡単です
sdk install mvnd
過去に手動インストールを使用した場合は、 ~/.m2/mvnd.properties
の設定が引き続き有効であることを確認してください。 SDKMAN! では、 JAVA_HOME
とMVND_HOME
の両方が SDKMAN! によって管理されるため、通常、 ~/.m2/mvnd.properties
ファイルはまったく必要ありません。
brew install mvndaemon/homebrew-mvnd/mvnd
注: 最新をインストールするmvnd
と 1.x ラインをインストールするmvnd@1
の 2 つの式があります。
sudo port install mvnd
Chocolatey、Scoop、または ASDF をサポートするための寄付を探しています。もしよろしければ…
オプションで、次のように補完を設定できます。
# ensure that MVND_HOME points to your mvnd distribution, note that sdkman does it for you
$ echo ' source $MVND_HOME/bin/mvnd-bash-completion.bash ' >> ~ /.bashrc
現時点でサポートされているシェルはbash
のみです。
https://downloads.apache.org/maven/mvnd/ から、プラットフォームに適した最新の ZIP をダウンロードします。
選択したディレクトリに解凍します
bin
ディレクトリをPATH
に追加します
JAVA_HOME
環境変数の設定を煩わしたくない場合は、オプションで~/.m2/mvnd.properties
を作成し、 java.home
プロパティを設定できます。
mvnd
機能するかどうかをテストします。
$ mvnd --version
Maven Daemon 0.0.11-linux-amd64 (native)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.osx.OsXNativePty
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/ppalaga/orgs/mvnd/mvnd/daemon/target/maven-distro
Java version: 11.0.1, vendor: AdoptOpenJDK, runtime: /home/data/jvm/adopt-openjdk/jdk-11.0.1+13
Default locale: en_IE, platform encoding: UTF-8
OS name: " linux " , version: " 5.6.13-200.fc31.x86_64 " , arch: " amd64 " , family: " unix "
Windows を使用していて、 VCRUNTIME140.dll was not found
というメッセージが表示された場合は、https://support.microsoft.com/en-us/help/2977003/the-latest-supported からvc_redist.x64.exe
をインストールする必要があります。 -ビジュアル-C-ダウンロード。詳細については、oracle/graal#1762 を参照してください。
macOS を使用している場合は、アーカイブを解凍した後、すべてのファイルから隔離フラグを削除する必要があります。
$ xattr -r -d com.apple.quarantine mvnd-xyz-darwin-amd64
mvnd
は、ストックmvn
と同じコマンドライン オプション (さらにいくつかの追加機能 - 以下を参照) を受け入れるように設計されています。例:
mvnd verify
mvnd
固有のオプション--status
実行中のデーモンをリストします。
--stop
実行中のすべてのデーモンを停止します
mvnd --help
オプションの完全なリストを出力します。
設定はプロパティ ファイルを通じて提供できます。 Mvnd は、次の場所からプロパティ ファイルを読み取ります。
MVND_PROPERTIES_PATH
環境変数またはmvnd.propertiesPath
システム変数を使用して指定されたプロパティ パス
[PROJECT_HOME]/.mvn/mvnd.properties
にあるローカル プロパティ パス
ユーザー プロパティのパス: [USER_HOME]/.m2/mvnd.properties
システム プロパティのパス: [MVND_HOME]/conf/mvnd.properties
最初のファイルで定義されたプロパティは、下位のファイルで指定されたプロパティより優先されます。
いくつかの特別なプロパティは上記のメカニズムに従いません。
mvnd.daemonStorage
: このプロパティは、mvnd がそのファイル (レジストリとデーモン ログ) を保存する場所を定義します。このプロパティは、コマンド ラインでシステム プロパティとしてのみ定義できます。
mvnd.id
: このプロパティは、作成されるデーモンを識別するために内部的に使用されます。
mvnd.extClasspath
: Maven 拡張クラスパスを指定する内部オプション
mvnd.coreExtensions
: 登録する Maven 拡張機能のリストを指定する内部オプション
利用可能なプロパティの完全なリストについては、/dist/src/main/distro/conf/mvnd.properties を参照してください。
mvnd
ビルドする git
メイビン
GitHub から GraalVM CE をダウンロードして解凍します
JAVA_HOME
、前の手順で GraalVM を解凍した場所に設定します。 java -version
出力が期待どおりであることを確認します。
$ $JAVA_HOME /bin/java -version
openjdk version " 11.0.9 " 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
native-image
ツールをインストールします。
$ $JAVA_HOME /bin/gu install native-image
native-image
プラットフォームによっては追加のソフトウェアのインストールが必要になる場合があります。 native-image
ドキュメントを参照してください。
mvnd
$ git clone https://github.com/apache/maven-mvnd.git
$ cd maven-mvnd
$ mvn clean verify -Pnative
...
$ cd client
$ file target/mvnd
target/mvnd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=93a554f3807550a13c986d2af9a311ef299bdc5a, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ls -lh target/mvnd
-rwxrwxr-x. 1 ppalaga ppalaga 25M Jun 2 13:23 target/mvnd
オペレーティング システムとして Windows を使用している場合は、 maven-mvnd
ビルドするために次の前提条件が必要になることに注意してください。ワークロード「C++ によるデスクトップ開発」と個別のコンポーネント「Windows Universal CRT SDK」を備えたバージョンの Visual Studio です。
mvnd
をインストールする$ cp -R dist/target/mvnd-[version] [target-dir]
次に、 [target-dir]/bin
PATH
に追加し、 mvnd
実行するだけです。
私たちはmvnd
改善できることを嬉しく思いますので、フィードバックを大歓迎です。