mvnd

Maven Daemon 1.0+

Maven Daemon(mvnd)コマンド速査集 —— 常駐 JVM デーモンで `mvn` をラップするツール。すべての mvn サブコマンドをそのまま使えるほか、デーモン管理用コマンド(--status / --stop / --shutdown など)を追加。

29 コマンド

デーモン管理

mvnd --status

稼働中の mvnd デーモンを一覧表示:ID、JDK ホーム、バージョン、稼働時間、アイドル時間、完了済み/実行中ビルド数。スクリプトでは `-o plain` でプレーンテキスト出力。

-o plain|json 出力形式

mvnd --status
mvnd --stop

1 つのアイドルデーモンを停止する。`--status` で表示されるデーモン ID を渡すこと。`-y` を付けない場合は確認プロンプトが出る。

-y 確認をスキップ

mvnd --stop 7d3c4e5f-a1b2-4c3d-9e0f-1234567890ab
mvnd --stop-all

稼働中の mvnd デーモンをすべて停止。JDK アップグレード、`JAVA_HOME` 切り替え、または常にコールドスタートでビルドしたい CI の事前ステップとして便利。

mvnd --stop-all
mvnd --shutdown

`--stop-all` のエイリアス。動作は同じ。mvnd 1.0+ を明示対象とするスクリプトではこちらを推奨。

mvnd --shutdown
mvnd --version

mvnd のバージョン、起動器の Java バージョン、デーモンで使用される Maven バージョンを表示。新しいデーモンが作られるか、既存のものが再利用されるかを確認する手段。

mvnd --version
mvnd --create-daemon

既存のデーモンを再利用せず、現在の JDK と Maven バージョンで新しいデーモンを強制的に作成する。`JAVA_HOME` 切り替え後に、古いデーモンが古いクラスデータを保持したままになるのを避けるのに便利。

--user <name> JVM 設定プリセット

mvnd --create-daemon clean install

ライフサイクルフェーズ(mvn のドロップイン)

mvnd validate

プロジェクトを検証:`pom.xml` の解析、スナップショットのダウンロード、依存関係の健全性チェック。`mvn validate` と完全同一。

mvnd validate
mvnd compile

`src/main/java` を `target/classes` にコンパイル。デーモンがウォームアップ済みの場合は `mvn compile` より格段に速い(JIT がプラグインを既に最適化済みのため)。

-DskipTests; -T 4 並列スレッド数(mvn に転送)

mvnd compile
mvnd test

Surefire 単体テストを実行。テストは依然として新しい JVM をフォークするため隔離は変わらず、効果が出るのは Maven 側のみ。

-Dtest=ClassName; -Dtest=Class#method; -DfailIfNoTests=false

mvnd test -Dtest=UserServiceTest
mvnd package

先行するフェーズをすべて実行し、出力を `target/*.jar`(または `.war`/`.ear`)としてパッケージング。

-DskipTests; -Dpackaging=jar

mvnd package -DskipTests
mvnd install

verify を実行し、生成された成果物を `~/.m2/repository/` にインストールしてローカル他プロジェクトから依存可能にする。

mvnd install -DskipTests
mvnd clean install

`target/` を消去して `install` まで一気に実行する「ゼロから再ビルド」の定番コマンド。デーモンが `clean` を跨いで生存するため、mvnd は mvn より圧倒的に速い。

-U スナップショット依存を強制更新

mvnd clean install -U
mvnd deploy

成果物をビルドし、`pom.xml` の `<distributionManagement>` に指定されたリモートリポジトリへ発行。`mvn deploy` と意味は同じ。

-DskipTests; -P release release プロファイルを使用

mvnd deploy -P release -DskipTests

デーモンチューニング

mvnd -Dmvnd.daemonStorage=<path> <phase>

デーモンレジストリディレクトリを上書き(デフォルト `~/.m2/mvnd/`)。プロジェクトごとに独立したパスを指定すれば、worktree ごとに独立したデーモンプールを持てる。

mvnd -Dmvnd.daemonStorage=.mvnd clean install
mvnd -Dmvnd.idleTimeout=<duration> <phase>

デーモンがアイドル状態のとき自動終了するまでの時間。デフォルト 3h。`30s` / `5m` / `2h` / `1d` を受け付ける。

mvnd -Dmvnd.idleTimeout=30m test
mvnd -Dmvnd.maxHeap=<size> <phase>

デーモン JVM のヒープを制限。デフォルト 2G。他のツールとメモリを分けたいときは下げる、大規模マルチモジュールで OOM が出たら上げる。

mvnd -Dmvnd.maxHeap=4G clean install
mvnd -Dmvnd.threads=<n> <phase>

同時に生存させるデーモン数の最大値。デフォルト = CPU コア数。下げるとアイドルメモリを節約、上げると異なる JDK/Maven 構成の並列稼働を許可する。

mvnd -Dmvnd.threads=2 test
mvnd -Dmvnd.scheduler=simple|async <phase>

デーモン選択方式。`simple`(デフォルト)は最も最近使ったデーモンを使用、`async` は Maven/JDK ごとに 1 つずつデーモンを保持し、適合するものにディスパッチ。複数 JDK を切り替えるなら `async`。

mvnd -Dmvnd.scheduler=async install

ビルド制御(mvn に転送)

mvnd -DskipTests <phase>

テストの実行はスキップするが、テストコードのコンパイルは行う。mvn と同じ — mvnd はすべての `-D` システムプロパティをそのまま転送する。

mvnd -DskipTests package
mvnd -T <n> <phase> / mvnd -T 1C <phase>

並列 reactor ビルド。`-T 4` で 4 スレッド、`-T 1C` で CPU コアあたり 1 スレッド。暖まったデーモンと組み合わせれば、`-T 1C clean install` は mvnd で最速のフルビルドになる。

mvnd -T 1C clean install
mvnd -B -ntp <phase>

バッチモード / 非インタラクティブ / 転送進捗バーを無効化。CI で推奨の記述法 — 進捗バーと ANSI カラーを切るのでログパーサーが安定する。

mvnd -B -ntp clean verify
mvnd -X <phase>

デバッグログ。各プラグイン実行とリポジトリ参照をすべて出力。出力は大きいのでファイルにリダイレクト推奨。

-e エラー時に完全なスタックトレース

mvnd -X test > mvnd-debug.log 2>&1
mvnd -pl <module> -am <phase>

指定モジュールとその依存を構築する。`-amd`(also-make-dependents)は逆方向。フラグは mvn と完全に同じ。

mvnd -pl user-service -am test
mvnd -s <settings.xml> <phase>

このビルドだけ `~/.m2/settings.xml` を指定ファイルで上書き。CI ではミラーリポジトリやリリース認証情報の差し替えに使う。

mvnd -s ./.mvn/settings.xml deploy
mvnd -o <phase>

オフラインモード — ローカルリポジトリにない成果物があると即座に失敗。mvnd はこのフラグをそのまま転送し、デーモン側で解決作業を行うだけ。

mvnd -o test

診断

mvnd --log <phase>

デーモン側の Maven ビルドログをフォアグラウンドにストリーム出力(デフォルトでは `~/.m2/mvnd/<daemon-id>/daemon.log` に書かれる)。デーモン内でのみ起きる失敗をデバッグするときに便利。

mvnd --log test
mvnd --purge

デーモンレジストリディレクトリ(デフォルト `~/.m2/mvnd/`)を完全に削除。JDK/Maven のメジャーバージョンアップでバイトレイアウトが変わった後、古いデーモンが原因不明のエラーを出すことがある — purge してから作り直す。

mvnd --purge
mvnd --help

mvnd 固有フラグ(`--status` ファミリー)をすべて列挙。完全な Maven フラグ(`-D` / `-P` / `-T` / `-pl` 等)は `mvn --help` を参照 — mvnd はそれらもすべてそのまま転送する。

mvnd --help

ラッパー

./mvnw <phase>

Maven Wrapper 経由でビルドを実行。mvnd を透過的に使いたいなら、wrapper を `mvndw` にシンボリックリンク/リネームするか、`.mvn/maven.config` で mvnd を呼ぶよう設定する。

./mvnw clean install

関連コマンド速查

Maven Daemon について

Apache Maven Daemon(mvnd)は標準的な `mvn` CLI のラッパーで、Peter Palaga 氏が立ち上げたプロジェクトです。長年にわたり Apache Software Foundation でインキュベーションされ、2024 年に初の安定版 1.0.0 がリリースされました。mvnd はバックグラウンドで 1 つ以上の常駐 JVM デーモンを維持し、ビルド要求をそれらにディスパッチします。Maven 3.x と同じ `pom.xml` / `~/.m2/repository` / プラグイン / ライフサイクルをそのまま使うため、真のドロップイン代替です。`mvnd compile` は `mvn compile` と完全に同じ動作をしますが、速度だけが違います。高速化は 3 つの要素から生まれます。(1)JVM は 1 回だけ起動され複数のビルドで再利用されるため、`mvn` が毎回支払う 1〜3 秒の JVM 起動コストが消える。(2)mvnd はデーモン用 JDK に GraalVM を使うため、ウォームアップ時間と常駐メモリ使用量を削減できる。(3)1 つのデーモン内で複数モジュールのビルドを並列実行できる。効果の目安は小規模単一モジュールで約 2 倍、大規模マルチモジュール reactor では 10 倍以上にもなります。mvnd はデーモンレジストリを `~/.m2/mvnd/`(通常の `~/.m2/repository/` とは別)に書き込むため、異なる JDK のデーモンを共存させることができます。デーモンは設定可能なアイドルタイムアウト(デフォルト 3 時間)で自動終了します。すべての処理はローカルで行われ、ソースコードや成果物が外部に送信されることはありません。

チートシート バージョン 1.0.0