Maven經(jīng)常被拿來和Gradle做對比倘潜,最大的劣勢之一就是Maven構(gòu)建慢,Gradle比Maven構(gòu)建速度快2到10倍,而如今Maven也可以更快了傍妒。Apache Maven團(tuán)隊(duì)從Gradle和Takari(Maven生命周期優(yōu)化器)中獲得靈感對Maven進(jìn)行了強(qiáng)化,衍生出 maven-mvnd項(xiàng)目摸柄。點(diǎn)贊颤练、再看、轉(zhuǎn)發(fā)走一波驱负,胖哥帶你玩新東西嗦玖。
簡單介紹
mvnd并不是對Maven進(jìn)行了重構(gòu),而是內(nèi)置了Maven跃脊。它實(shí)際上是一個(gè)或者多個(gè)Maven守護(hù)進(jìn)程宇挫,用來執(zhí)行實(shí)際的構(gòu)建服務(wù)。一個(gè)守護(hù)進(jìn)程實(shí)例可以為來自mvnd客戶端的多個(gè)連續(xù)請求提供Maven構(gòu)建服務(wù)酪术。當(dāng)沒有空閑的守護(hù)進(jìn)程時(shí)來支撐構(gòu)建請求時(shí)器瘪,mvnd可以并行生成多個(gè)守護(hù)程序。
使用GraalVM代替JVM
mvnd之所以快是因?yàn)樗褂昧薌raalVM替代了傳統(tǒng)的JVM绘雁,因此它啟動(dòng)更快橡疼,占用內(nèi)存更少,而且在實(shí)行構(gòu)建時(shí)不需要為每個(gè)構(gòu)建啟動(dòng)新的JVM庐舟。另外Maven插件在構(gòu)建時(shí)不再需要多次加載欣除,而是緩存在多個(gè)構(gòu)建中。SNAPSHOT版本的Maven插件不會(huì)被緩存继阻。
支持JIT
GraalVM的JIT(Just In Time)實(shí)時(shí)編譯特性也被運(yùn)用到Maven構(gòu)建作業(yè)中耻涛。JIT可以大大降低編譯時(shí)間,在重復(fù)構(gòu)建過程中瘟檩,JIT優(yōu)化代碼立即可用抹缕,也極大提高了構(gòu)建效率。
并行構(gòu)建
目前Maven 3的并行構(gòu)建(parallel builds)還是實(shí)驗(yàn)特性墨辛,而且要求使用的插件必須是線程安全的卓研。而mvnd默認(rèn)就支持使用多個(gè)CPU內(nèi)核進(jìn)行并行構(gòu)建。當(dāng)然如果你的源代碼不支持并行構(gòu)建,也可以通過添加- T1
參數(shù)切換到串行構(gòu)建奏赘。
安裝
目前mvnd已經(jīng)支持Linux寥闪、MacOS、Windows平臺磨淌。你可以分別通過SDKMAN疲憋、Homebrew、Chocolatey這些包管理器進(jìn)行安裝梁只。也可以直接去mvnd發(fā)行版?zhèn)}庫下載對應(yīng)的二進(jìn)制進(jìn)行安裝缚柳。這里以Windows為例,我選擇Chocolatey安裝:
choco install mvndaemon
配置
配置很簡單搪锣,只需要注意兩點(diǎn)
- 如果不使用包管理器進(jìn)行安裝的話請確保mvnd的bin目錄關(guān)聯(lián)到PATH
- 如果沒有配置或者不想配置JAVA_HOME環(huán)境變量的話請?jiān)趡/.m2/mvnd.properties中設(shè)置java.home以指定Java目錄秋忙,例如:java.home=C:\AdoptOpenJDK\jdk-8。已經(jīng)配置環(huán)境變量的請忽略該條构舟。
使用
安裝配置完畢后命令行執(zhí)行mvnd --version
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來查看完整的命令選項(xiàng)清單狗超。
說實(shí)話并行構(gòu)建就是快弹澎,簡直坐火箭一般。另外努咐,控制臺輸出也優(yōu)化了裁奇。
由于GraalVM的加持,這個(gè)工具很可能會(huì)延長Maven的生命麦撵,避免過早被Gradle拉開優(yōu)勢。對于我們來說溃肪,這個(gè)項(xiàng)目可以觀望一下免胃,看看Apache Maven官方的進(jìn)一步動(dòng)作。