📘 什麽是 Mvnd
Mvnd 是 Apache Maven Daemon 的簡稱,是一個透過 GraalVM 構建的本地可執行檔,用於加速 Maven 構建。Mvnd 的設計理念是透過在背景執行一個守護行程來避免每次構建時啟動新的 JVM,從而顯著提升構建速度。
Mvnd 不僅內建了 Maven,因此 無需單獨安裝 Maven ,還透過 GraalVM 編譯為本地可執行檔( 無需安裝 Java ),啟動速度更快,記憶體占用更少。
🚀 Mvnd 的優勢
啟動速度快 :由於 Mvnd 是透過 GraalVM 構建的本地可執行檔,它避免了每次構建時啟動新的 JVM 的開銷,從而顯著減少了啟動時間。
記憶體占用少 :作為一個本地可執行檔,Mvnd 在啟動時使用的記憶體比傳統的 JVM 要少,這使得它在資源受限的環境中表現尤為出色。
並列處理能力
:Mvnd 預設使用多個 CPU 核心並列構建模組,顯著提高了構建速度。具體來說,Mvnd 使用的核心數量由公式
Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)
決定。
使用者在使用 Mvnd 時,可能會遇到一些與 Maven 外掛程式相關的問題。Mvnd 會緩存 Maven 外掛程式類的類載入器,以提高構建速度。然而,對於 SNAPSHOT 版本的 Maven 外掛程式,Mvnd 不會進行緩存。因此,使用者需要註意外掛程式版本的管理,以確保構建過程的順利進行。
效能提升實測
筆者基於 pigx(多模組 Maven)計畫進行構建,效能提升顯著,環境說明:
芯片:M3 Pro
核總數:11(5效能和6能效)
記憶體:36 GB
mvnd clean install
mvnd clean install
Building pigx daemon: 28247b49 threads used/hidden/max: 9/0/10 progress: 9/51 17% time: 00:05
[INFO] Total time: 21.399 s (Wall Clock)
[INFO] Finished at: 2024-06-19T22:11:16+08:00
註意如上日誌:mvnd 動態計算可用的執行緒資源最大 10 個執行,後續我們同時使用 10 個執行緒測試 mvn。
mvn clean install
mvn clean install
[INFO] Total time: 01:02 min
[INFO] Finished at: 2024-06-19T22:30:06+08:00
指定 10 個執行緒
mvn clean install -T 10
[INFO] Total time: 34.137 s (Wall Clock)
[INFO] Finished at: 2024-06-19T22:27:15+08:00
[INFO] ------------------------------------------------------------------------
如何使用
下載並解壓安裝 :Mvnd Releases
配置 mvnd 環境變量
以上兩步就完成了 mvnd 的安裝,預設情況下已經內建 Maven,無需再下載 Maven。