更快的Maven來了

Maven經常被拿來和Gradle做對比,最大的劣勢之一就是Maven構建慢,GradleMaven構建速度快2到10倍,而如今Maven也可以更快了。Apache Maven團隊從GradleTakari(Maven生命週期優化器)中獲得靈感對Maven進行了強化,衍生出 maven-mvnd項目,今天胖哥帶你來嚐嚐鮮。

簡單介紹

mvnd並不是對Maven進行了重構,而是內置了Maven。它實際上是一個或者多個Maven守護進程,用來執行實際的構建服務。一個守護進程實例可以爲來自mvnd客戶端的多個連續請求提供Maven構建服務。當沒有空閒的守護進程時來支撐構建請求時,mvnd可以並行生成多個守護程序。

使用GraalVM代替JVM

mvnd之所以快是因爲它使用了GraalVM替代了傳統的JVM,因此它啓動更快,佔用內存更少,而且在實行構建時不需要爲每個構建啓動新的JVM。另外Maven插件在構建時不再需要多次加載,而是緩存在多個構建中。SNAPSHOT版本的Maven插件不會被緩存。

支持JIT

GraalVMJIT(Just In Time)實時編譯特性也被運用到Maven構建作業中。JIT可以大大降低編譯時間,在重複構建過程中,JIT優化代碼立即可用,也極大提高了構建效率。

並行構建

目前Maven 3的並行構建(parallel builds)還是實驗特性,而且要求使用的插件必須是線程安全的。而mvnd默認就支持使用多個CPU內核進行並行構建。當然如果你的源代碼不支持並行構建,也可以通過添加- T1 參數切換到串行構建。

簡單嘗試

接下來簡單嘗試一下mvnd

安裝

目前mvnd已經支持LinuxMacOSWindows平臺。你可以分別通過SDKMANHomebrewChocolatey這些包管理器進行安裝。也可以直接去mvnd發行版倉庫下載對應的二進制進行安裝。這裏以Windows爲例,我選擇Chocolatey安裝:

choco install mvndaemon

時間可能比較長一些。

配置

配置很簡單,只需要注意兩點

  • 如果不使用包管理器進行安裝的話請確保mvndbin目錄關聯到PATH
  • 如果沒有配置或者不想配置JAVA_HOME環境變量的話請在~/.m2/mvnd.properties中設置java.home以指定Java目錄,例如:java.home=C:\\AdoptOpenJDK\\jdk-8。已經配置環境變量的請忽略該條。

其它的配置項可參考mvnd配置

使用

安裝配置完畢後命令行執行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"

爲了降低學習成本mvnd的方式和傳統Maven類似,mvn變成了mvnd,你也可以通過mvnd --help來查看完整的命令選項清單。

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

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

關注公衆號:Felordcn 獲取更多資訊

個人博客:https://felord.cn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章