更快的Maven來了

源?/?? ? ? ??文/?
Maven經(jīng)常被拿來和Gradle做對比,最大的劣勢之一就是Maven構(gòu)建慢,Gradle比Maven構(gòu)建速度快2到10倍,而如今Maven也可以更快了。Apache Maven團隊從Gradle和Takari(Maven生命周期優(yōu)化器)[1]中獲得靈感對Maven進行了強化,衍生出?maven-mvnd[2]項目。點贊、再看、轉(zhuǎn)發(fā)走一波,胖哥帶你玩新東西。
簡單介紹
mvnd并不是對Maven進行了重構(gòu),而是內(nèi)置了Maven。它實際上是一個或者多個Maven守護進程,用來執(zhí)行實際的構(gòu)建服務(wù)。一個守護進程實例可以為來自mvnd客戶端的多個連續(xù)請求提供Maven構(gòu)建服務(wù)。當沒有空閑的守護進程時來支撐構(gòu)建請求時,mvnd可以并行生成多個守護程序。
使用GraalVM代替JVM
mvnd之所以快是因為它使用了GraalVM替代了傳統(tǒng)的JVM,因此它啟動更快,占用內(nèi)存更少,而且在實行構(gòu)建時不需要為每個構(gòu)建啟動新的JVM。另外Maven插件在構(gòu)建時不再需要多次加載,而是緩存在多個構(gòu)建中。SNAPSHOT版本的Maven插件不會被緩存。
支持JIT
GraalVM的JIT(Just In Time)實時編譯特性也被運用到Maven構(gòu)建作業(yè)中。JIT可以大大降低編譯時間,在重復(fù)構(gòu)建過程中,JIT優(yōu)化代碼立即可用,也極大提高了構(gòu)建效率。
并行構(gòu)建
目前Maven 3的并行構(gòu)建(parallel builds)還是實驗特性,而且要求使用的插件必須是線程安全的。而mvnd默認就支持使用多個CPU內(nèi)核進行并行構(gòu)建。當然如果你的源代碼不支持并行構(gòu)建,也可以通過添加- T1?參數(shù)切換到串行構(gòu)建。
簡單嘗試
接下來簡單嘗試一下mvnd。
安裝
目前mvnd已經(jīng)支持Linux、MacOS、Windows平臺。你可以分別通過SDKMAN、Homebrew、Chocolatey這些包管理器進行安裝。也可以直接去mvnd發(fā)行版?zhèn)}庫[3]下載對應(yīng)的二進制進行安裝。這里以Windows為例,我選擇Chocolatey安裝:
choco?install?mvndaemon
時間可能比較長一些。
配置
配置很簡單,只需要注意兩點
如果不使用包管理器進行安裝的話請確保mvnd的 bin目錄關(guān)聯(lián)到PATH。如果沒有配置或者不想配置 JAVA_HOME環(huán)境變量的話請在~/.m2/mvnd.properties中設(shè)置java.home以指定Java目錄,例如:java.home=C:\\AdoptOpenJDK\\jdk-8。已經(jīng)配置環(huán)境變量的請忽略該條。
其它的配置項可參考mvnd配置[4]。
使用
安裝配置完畢后命令行執(zhí)行mvnd --version出現(xiàn)下列結(jié)果就表示安裝成功了。
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"
為了降低學(xué)習(xí)成本mvnd的方式和傳統(tǒng)Maven類似,mvn變成了mvnd,你也可以通過mvnd --help來查看完整的命令選項清單。
說實話并行構(gòu)建就是快,簡直坐火箭一般。另外,控制臺輸出也優(yōu)化了。

由于GraalVM的加持,這個工具很可能會延長Maven的生命,避免過早被Gradle拉開優(yōu)勢。對于我們來說,這個項目可以觀望一下,看看Apache Maven官方的進一步動作。
END


頂級程序員:topcoding
做最好的程序員社區(qū):Java后端開發(fā)、Python、大數(shù)據(jù)、AI
一鍵三連「分享」、「點贊」和「在看」
