maven-mvnd高性能構(gòu)建插件
1. 簡介
mvnd屬于maven的子項目,目的是為了提高構(gòu)建性能,且學(xué)習(xí)成本很低,可以花極少的時間學(xué)習(xí)就能大幅提高工作效率。
GitHub:https://github.com/apache/maven-mvnd
2.特性
-
mvnd內(nèi)嵌了maven(無需另外安裝maven,已經(jīng)安裝過maven也不用擔(dān)心沖突) - 實際的構(gòu)建是在長期的守護進程中進行
- 一個守護進程可以為多個構(gòu)建請求提供服務(wù)
-
mvnd客戶端是基于GraalVM構(gòu)建,與傳統(tǒng) JVM 相比,它啟動速度更快,使用的內(nèi)存更少。
3.優(yōu)勢
- 用于運行實際構(gòu)建的
JVM不需要為每個構(gòu)建重新啟動。 - 持有
Maven插件類的類加載器被緩存在多個構(gòu)建中。因此,插件 jar 只需讀取和解析一次。 -
GraalVM的JIT(Just In Time)實時編譯特性也被運用到Maven構(gòu)建作業(yè)中。JIT可以大大降低編譯時間,在重復(fù)構(gòu)建過程中,JIT優(yōu)化代碼立即可用,也極大提高了構(gòu)建效率。
4.安裝

image
- 下載對應(yīng)系統(tǒng)的壓縮包
- 解壓后修改配置文件,修改
conf/mvnd.properties

image
拉到底部修改
settings文件目錄,可以指向原安裝maven中的xml文件,也可單獨放到一個目錄中。

image
- 配置環(huán)境變量
將
mvnd的bin目錄配置到環(huán)境變量path中
5. 測試
以多模塊復(fù)雜項目在Windows構(gòu)建為例。
默認(rèn)情況下,mvnd使用多個 CPU 內(nèi)核并行構(gòu)建模塊,如果該項目不支持并行構(gòu)建,可以增加-T1參數(shù)進行串行構(gòu)建。
-
maven構(gòu)建
# 執(zhí)行maven命令開始構(gòu)建
mvn clean -U -Dmaven.test.skip=true package
# 最終結(jié)果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 05:14 min
[INFO] Finished at: 2022-01-18T11:28:46+08:00
[INFO] ------------------------------------------------------------------------
-
mvnd構(gòu)建(并行)
# 執(zhí)行maven-mvnd命令開始構(gòu)建
mvnd clean -U -Dmaven.test.skip=true package
# 最終結(jié)果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:45 min (Wall Clock)
[INFO] Finished at: 2022-01-18T11:31:19+08:00
[INFO] ------------------------------------------------------------------------
-
mvnd構(gòu)建(串行)
# 執(zhí)行maven-mvnd命令開始構(gòu)建
mvnd clean -U -Dmaven.test.skip=true package -T1
# 最終結(jié)果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:51 min
[INFO] Finished at: 2022-01-18T11:39:17+08:00
[INFO] ------------------------------------------------------------------------
- 參照構(gòu)建時間,并行方式構(gòu)建大幅減少。