更快的Maven來了,我的天,速度提升了8倍!
周末被 maven-mvnd 刷屏了,於是我也下載了一個 mvnd 體驗了一把。雖然測試的數據都是基於我本地項目,不具備普適性和權威性,但也足以說明問題。它的測試結果遠遠超出我的預期,下面一起來看。
什麼是 mvnd?
mvnd 是 Maven Daemon 的縮寫 ,翻譯成中文就是 Maven 守護進程。
mvnd 是 apache/maven 的一個子項目,它並不是一個全新的構建工具,而是對 maven 的擴展。它內置了 maven,其實現原理是構建了一個或者多個 maven 守護進程來執行構建服務。
mvnd 概述
1.mvnd 的目標是使用 Gradle 和 Takari 所知的技術提供更快的 Maven 構建。
Gradle 是一個基於 Apache Ant 和 Apache Maven 概念的項目自動化建構工具。Gradle 構建腳本使用的是 Groovy 或 Kotlin 的特定領域語言來編寫的,而不是傳統的 XML。Gradle 最大的優勢就是比傳統的 Maven 構建速度更快。
Takari 是 maven-wrapper 核心,大部分的開源項目都是提供 warpper 方便用戶不安裝 maven 的前提下快速構建項目的。
2.mvnd 內嵌了 Maven,所以不需要單獨安裝 Maven 了。
3.一個守護進程實例可以服務於來自 mvnd 客戶端的多個連續請求。
4.mvnd 客戶端使用 GraalVM 構建本地可執行文件,與啟動傳統 JVM 相比,它啟動得更快,佔用的記憶體更少。
5.如果 mvnd 沒有空閑守護進程來服務一個構建請求,可以並行地生成多個守護進程。
mvnd 優點介紹
mvnd 具有以下優點:
- 用於運行構建的 JVM 不需要每次構建都重新啟動。
- 持有 Maven 插件類的類載入器在多個構建中會被快取。 因此,插件 jar 文件只被讀取和解析一次。(快照版本的 Maven 插件不會被快取)
- JVM 中即時(JIT)編譯器生成的本地程式碼也被保留,與常規 Maven 相比,JIT 編譯所花費的時間更少。在重複構建期間,JIT 優化的程式碼立即可用,這不僅適用於來自 Maven 插件和 Maven Core的程式碼,也適用於所有來自 JDK 本身的程式碼。
mvnd 安裝
mvnd 支援 Window、Linux、Macos,本文以 Windows 安裝為例。
1.下載並解壓 mvnd
下載地址://github.com/apache/maven-mvnd/releases
選擇最新版的 Windows 資源包,如下圖所示:
下載完成之後,解壓到本地的某個目錄,如下圖所示:
2.配置環境變數
將 mvnd 解碼包的執行目錄 bin 配置到系統變數 path 中,操作步驟如下圖所示:
3.測試 mvnd 安裝
接下來打開命令行窗口,使用「mvnd -version」檢查一下 mvnd 是否正常安裝成功,如下圖所示:
如果列印了相關的版本資訊就說明安裝成功了。
mvn VS mvnd 性能測試
接下來就是本文的重頭戲了,使用我本地的一個項目來測試一下 mvn 和 mvnd 的性能差距。
我的電腦配置如下:
1.mvn 性能測試
傳統的 maven 執行結果如下圖所示:
打包我本地的一個項目,跳過單元測試。
mvn 性能測試結果:1.312 秒。
2.mvnd 性能測試
mvnd 性能測試結果 0.154 秒。
總結
本文介紹了 mvnd,一個內置了 maven 但執行效率遠比 maven 快很多的工具。它的上手難度很低,對於用戶來說,只是將之前 maven 命令的開頭從「mvn」換成了「mvnd」而已。
mvnd 構建了一個或者多個 maven 守護進程,使用了全新的 VM 引擎,並添加了快取及 JIT 優化,從而大大的提高了 maven 項目的構建速度,也讓我們看到了一個能與 Gradle 一較高下的希望,我會持續關注此項目,希望它發展的越來越好。
參考資料://github.com/apache/maven-mvnd
是非審之於己,毀譽聽之於人,得失安之於數。
公眾號:Java面試真題解析