Maven經常被拿來和Gradle做對比,最大的劣勢之一就是Maven構建慢,Gradle比Maven構建速度快2到10倍,而如今Maven也可以更快了。Apache Maven團隊從Gradle和Takari(Maven生命週期最佳化器)[1]中獲得靈感對Maven進行了強化,衍生出 maven-mvnd[2]專案。
簡單介紹
mvnd
並不是對
Maven
進行了重構,而是內建了
Maven
。它實際上是一個或者多個Maven守護程序,用來執行實際的構建服務。一個守護程序例項可以為來自
mvnd
客戶端的多個連續請求提供
Maven
構建服務。當沒有空閒的守護程序時來支撐構建請求時,
mvnd
可以並行生成多個守護程式。
使用GraalVM代替JVM
mvnd
之所以快是因為它使用了
GraalVM
替代了傳統的
JVM
,因此它啟動更快,佔用記憶體更少,而且在實行構建時不需要為每個構建啟動新的
JVM
。另外
Maven
外掛在構建時不再需要多次載入,而是快取在多個構建中。
SNAPSHOT
版本的Maven外掛不會被快取。
支援JIT
GraalVM
的
JIT
(Just In Time)實時編譯特性也被運用到
Maven
構建作業中。
JIT
可以大大降低編譯時間,在重複構建過程中,
JIT
最佳化程式碼立即可用,也極大提高了構建效率。
並行構建
目前
Maven 3
的並行構建(parallel builds)還是實驗特性,而且要求使用的外掛必須是執行緒安全的。而
mvnd
預設就支援使用多個CPU核心進行並行構建。當然如果你的原始碼不支援並行構建,也可以透過新增
- T1
引數切換到序列構建。
接下來簡單嘗試一下mvnd。
安裝
目前
mvnd
已經支援
Linux
、
MacOS
、
Windows
平臺。你可以分別透過
SDKMAN
、
Homebrew
、
Chocolatey
這些包管理器進行安裝。也可以直接去
mvnd發行版倉庫
[3]下載對應的二進位制進行安裝。這裡以
Windows
為例,我選擇
Chocolatey
安裝:
choco install mvndaemon
時間可能比較長一些。
配置
配置很簡單,只需要注意兩點
如果不使用包管理器進行安裝的話請確保
mvnd
的
bin
目錄關聯到
PATH
。
如果沒有配置或者不想配置
JAVA_HOME
環境變數的話請在
~/。m2/mvnd。properties
中設定
java。home
以指定
Java
目錄,例如:
java。home=C:\\AdoptOpenJDK\\jdk-8
。已經配置環境變數的請忽略該條。
其它的配置項可參考
mvnd配置
[4]。
使用
安裝配置完畢後命令行執行
mvnd ——version
出現下列結果就表示安裝成功了。
mvnd ——versionmvnd native client 0。7。1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)Terminal: org。jline。terminal。impl。jansi。win。JansiWinSysTerminalApache Maven 3。8。3 (ff8e977a158738155dc465c6a97ffaf31982d739)Maven home: C:\Program Files\mvndaemon\mvnd-0。7。1-windows-amd64\mvnJava version: 1。8。0_282, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-8。0。282。8-hotspot\jreDefault locale: zh_CN, platform encoding: GBKOS name: “windows 10”, version: “10。0”, arch: “amd64”, family: “windows”
為了降低學習成本
mvnd
的方式和傳統
Maven
類似,
mvn
變成了
mvnd
,你也可以透過
mvnd ——help
來檢視完整的命令選項清單。
說實話並行構建就是快,簡直坐火箭一般。另外,控制檯輸出也優化了。
由於
GraalVM
的加持,這個工具很可能會延長
Maven
的生命,避免過早被
Gradle
拉開優勢。對於我們來說,這個專案可以觀望一下,看看
Apache Maven
官方的進一步動作。
參考資料
[1]Takari(Maven生命週期最佳化器): http://takari。io/book/40-lifecycle。html
[2]maven-mvnd: https://github。com/apache/maven-mvnd
[3]mvnd發行版倉庫: https://github。com/mvndaemon/mvnd/releases
[4]mvnd配置: https://github。com/mvndaemon/mvnd/blob/master/dist/src/main/distro/conf/mvnd。properties
文章來源於碼農小胖哥 ,作者碼農小胖哥個人部落格:https://felord。cn