更快的 Maven 來了!效能提升 300%

更快的 Maven 來了!效能提升 300%

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

來檢視完整的命令選項清單。

說實話並行構建就是快,簡直坐火箭一般。另外,控制檯輸出也優化了。

更快的 Maven 來了!效能提升 300%

由於

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