在 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 知識海洋裏有了一盞再也不會迷路的燈塔。
沒有什麼使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不繫之舟。