Maven經常被拿來和Gradle做對比棺聊,最大的劣勢之一就是Maven構建慢耀销,Gradle比Maven構建速度快2到10倍,而如今Maven也可以更快了之景。Apache Maven團隊從Gradle和Takari(Maven生命周期優(yōu)化器)中獲得靈感對Maven進行了強化嗤疯,衍生出 maven-mvnd項目,今天胖哥帶你來嘗嘗鮮闺兢。
簡單介紹
mvnd并不是對Maven進行了重構,而是內置了Maven戏罢。它實際上是一個或者多個Maven守護進程屋谭,用來執(zhí)行實際的構建服務。一個守護進程實例可以為來自mvnd客戶端的多個連續(xù)請求提供Maven構建服務龟糕。當沒有空閑的守護進程時來支撐構建請求時桐磁,mvnd可以并行生成多個守護程序。
使用GraalVM代替JVM
mvnd之所以快是因為它使用了GraalVM替代了傳統(tǒng)的JVM讲岁,因此它啟動更快我擂,占用內存更少,而且在實行構建時不需要為每個構建啟動新的JVM缓艳。另外Maven插件在構建時不再需要多次加載校摩,而是緩存在多個構建中。SNAPSHOT版本的Maven插件不會被緩存阶淘。
支持JIT
GraalVM的JIT(Just In Time)實時編譯特性也被運用到Maven構建作業(yè)中衙吩。JIT可以大大降低編譯時間,在重復構建過程中溪窒,JIT優(yōu)化代碼立即可用坤塞,也極大提高了構建效率冯勉。
并行構建
目前Maven 3的并行構建(parallel builds)還是實驗特性,而且要求使用的插件必須是線程安全的摹芙。而mvnd默認就支持使用多個CPU內核進行并行構建灼狰。當然如果你的源代碼不支持并行構建,也可以通過添加- T1
參數(shù)切換到串行構建浮禾。
簡單嘗試
接下來簡單嘗試一下mvnd交胚。
安裝
目前mvnd已經支持Linux、MacOS伐厌、Windows平臺承绸。你可以分別通過SDKMAN、Homebrew挣轨、Chocolatey這些包管理器進行安裝军熏。也可以直接去mvnd發(fā)行版?zhèn)}庫下載對應的二進制進行安裝。這里以Windows為例卷扮,我選擇Chocolatey安裝:
choco install mvndaemon
時間可能比較長一些荡澎。
配置
配置很簡單,只需要注意兩點
- 如果不使用包管理器進行安裝的話請確保mvnd的
bin
目錄關聯(lián)到PATH
晤锹。 - 如果沒有配置或者不想配置
JAVA_HOME
環(huán)境變量的話請在~/.m2/mvnd.properties
中設置java.home
以指定Java目錄摩幔,例如:java.home=C:\\AdoptOpenJDK\\jdk-8
。已經配置環(huán)境變量的請忽略該條鞭铆。
其它的配置項可參考mvnd配置或衡。
使用
安裝配置完畢后命令行執(zhí)行mvnd --version
出現(xiàn)下列結果就表示安裝成功了。
mvnd --version
mvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)
Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: C:\Program Files\mvndaemon\mvnd-0.7.1-windows-amd64\mvn
Java version: 1.8.0_282, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-8.0.282.8-hotspot\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
為了降低學習成本mvnd的方式和傳統(tǒng)Maven類似车遂,mvn
變成了mvnd
封断,你也可以通過mvnd --help
來查看完整的命令選項清單。
說實話并行構建就是快舶担,簡直坐火箭一般坡疼。另外,控制臺輸出也優(yōu)化了衣陶。
由于GraalVM的加持柄瑰,這個工具很可能會延長Maven的生命,避免過早被Gradle拉開優(yōu)勢剪况。對于我們來說教沾,這個項目可以觀望一下,看看Apache Maven官方的進一步動作拯欧。
關注公眾號:碼農小胖哥详囤,獲取更多資訊