取代 Maven?這款專案構建工具效能提升 300%

沉默王二發表於2021-12-31

在 GitHub 上閒逛的時候,發現了一個新的專案:maven-mvnd,持續霸佔 GitHub trending 榜單好幾天了。

maven-mvnd,可以讀作 Maven Daemon,譯作 Maven 守護版,旨在為 Maven 提供更快的構建速度,靈感借鑑了 Gradle 和 Takari(Maven 生命週期優化器)。

https://github.com/apache/maven-mvnd

Maven 和 Gradle 可以說是專案構建工具中的絕代雙驕,我自己的觀點是:Maven 不比 Gradle 好,Gradle 也不比 Maven 好

瞧我這該死的觀點,足夠的圓滑。

Maven 的優點是穩定可靠,在絕大多數的專案上工作良好,社群生態很完善,幾乎所有的 Java 開發者都在用。Maven 的缺點是,對於大一點的專案來說,構建太慢了。

Gradle 的優點是足夠的靈活,構建速度也會更快一點,因為使用了後臺程式和快取機制。Gradle 的缺點是版本迭代速度太快,社群跟不上,對於初學者來說,學習曲線比較陡峭。

mvnd 並不是 Maven 的重構版,等於是 Maven ∩ (Gradle & Takari) 部分優點的一個交集

mvnd 使用了以下架構方式:

  • 內部嵌入了 Maven,所以不需要單獨安裝 Maven。
  • 使用守護程式進行構建,守護程式可以為多個 mvnd 客戶端的連續請求提供服務。
  • 使用了內建的 GraalVM 虛擬機器,和傳統的 Java 虛擬機器相比,它的啟動速度更快,使用記憶體更少,內部的 JIT 編譯器在編譯時花費的時間也更少。
  • 如果已有的守護程式都在工作中,則可以新建多個守護程式來支撐新的構建請求。

這種架構方式使得 mvnd 的效能優勢得到了進一步提升。

好,我們來簡單嘗試下。

mvnd 像 Maven 一樣,可以跨平臺,支援 Windows、macOS和 Linux。自動化安裝的命令也非常簡單,如下所示:

# Windows
choco install mvndaemon 
# Linux
sdk install mvnd
# macOS
brew install mvndaemon/homebrew-mvnd/mvnd

為了方便演示,我這裡採用手動安裝的方式,速度也會更快一點。

通過下面的網址下載 mvnd 的 release 版本:

https://github.com/apache/maven-mvnd/releases

下載完成後解壓,然後把 bin 目錄新增到 PATH 路徑下。

在終端執行 mvnd -v 就可以檢視到 mvnd 的配置資訊了。

如果出現類似下面這樣的錯誤,未找到 JAVA_HOME,可以按照提示在對應的檔案中追加 java.home 屬性,也就是 JDK 的安裝路徑。

剛好之前搭建了一個Spring Boot 專案,我們可以拿 Maven 和 mvnd 來對比一下構建速度。

先執行 mvn clean package 命令,一共花費的時間是 5.318 秒。

再執行 mvnd clean package 命令,一共花費的時間是 3.225 秒。

反覆多測試幾次,發現 mvnd 確實比 Maven 要快上許多!Maven 維持在 5 秒多,mvnd 維持在 3 秒左右。

當然了,我本地這個 Spring Boot 專案本身非常簡單,如果是構建時間更長一點的專案,mvnd 的優勢會更大。

感受一下 mvnd 在一個 24 核電腦上執行的樣子吧,簡直就是效率神器!


本篇已收錄至 GitHub 上星標 1.0k+ star 的開源專欄《Java 程式設計師進階之路》,該專欄風趣幽默、通俗易懂,對 Java 愛好者極度友好和舒適?,內容包括但不限於 Java 基礎、Java 集合框架、Java IO、Java 併發程式設計、Java 虛擬機器、Java 企業級開發(Git、SSM、Spring Boot)等核心知識點。

該專欄目前也在霸榜 GitHub Trending(Java 類),這讓二哥終於體會到了霸榜的快樂!

star 了這個專欄就等於你在浩瀚的 Java 知識海洋裡有了一盞再也不會迷路的燈塔。

https://github.com/itwanger/toBeBetterJavaer

沒有什麼使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不繫之舟

相關文章