mvnd

Maven Daemon 1.0+

Maven Daemon(mvnd)指令速查 —— 長駐 JVM 背景處理程序的 mvn 包裝,所有 mvn 子指令均可直接使用,外加守護程序管理指令(--status / --stop / --shutdown)。

29 條命令

守護程序管理

mvnd --status

列出所有執行中嘅 mvnd 守護程序:ID、JDK home、版本、執行時長、閒置時間、已完成/正在執行嘅建構數。指令稿中可用 `-o plain` 輸出純文字。

-o plain|json 輸出格式

mvnd --status
mvnd --stop

停止一個閒置嘅守護程序,需傳入 `--status` 顯示嘅守護程序 ID。除非加 `-y`,否則會提示確認。

-y 略過確認

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

關閉所有執行中嘅 mvnd 守護程序。升級 JDK、切換 `JAVA_HOME`、或想冷啟動建構時使用。

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 drop-in)

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 單元測試。測試仍 fork 新 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 強制更新 snapshot 依賴

mvnd clean install -U
mvnd deploy

建構並將製品發佈到 `pom.xml` 嘅 `<distributionManagement>` 指定嘅遠端倉庫。語義與 `mvn deploy` 一致。

-DskipTests; -P release 使用 release profile

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>

mvnd 同時保活嘅最大守護程序數。預設 = CPU 核心數。調細可減少閒置記憶體;調大可令唔同 JDK/Maven 組合並行。

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

守護程序選擇策略。`simple`(預設)揀最近用過嘅;`async` 為每種 Maven/JDK 組合各保留一個守護程序並按需分派。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 推薦寫法——mvnd 關閉進度條與 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>

今次建構用指定嘅 `settings.xml` 覆寫 `~/.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 軟件基金會下推出,1.0.0 穩定版於 2024 年發佈。mvnd 喺背景維護一個或多個長駐 JVM 守護程序,並將每次建構請求分派畀佢哋。佢複用 Maven 3.x 嘅 `pom.xml`、`~/.m2/repository`、所有插件同生命週期階段,所以係真·drop-in 替代品——`mvnd compile` 同 `mvn compile` 行為完全一樣,只係更快。加速嚟自三個層面:(1)JVM 只啟動一次並喺多次建構之間複用,跳過 `mvn` 每次調用 1-3 秒嘅 JVM 啟動開銷;(2)mvnd 用 GraalVM 做守護程序嘅 JDK,縮短預熱時間並降低常駐記憶體;(3)單一守護程序內可並行執行多模組建構。速度提升範圍由細型單模組項目嘅約 2 倍,到大型多模組 reactor 嘅 10 倍以上。mvnd 嘅守護程序註冊目錄位於 `~/.m2/mvnd/`(同 `~/.m2/repository/` 分開),容許多個守護程序使用唔同 JDK 並存。守護程序喺可配置嘅閒置超時(預設 3 小時)後自動關閉。所有處理都喺本地完成,原始碼或製品唔會上傳到任何地方。

速查頁版本 1.0.0