mvnd
- Maven 守護程式mvnd
mvnd
特定選項mvnd
mvnd
mvnd
該專案旨在使用 Gradle 和 Takari 已知的技術提供更快的 Maven 建置。
架構概述:
mvnd
嵌入了 Maven(因此無需單獨安裝 Maven)。
實際的建置發生在一個長期存在的後台程式(也稱為守護程式)內。
一個守護程式執行個體可以服務來自mvnd
客戶端的多個連續請求。
mvnd
客戶端是使用 GraalVM 建置的本機執行檔。與啟動傳統 JVM 相比,它啟動速度更快並且使用更少的記憶體。
如果沒有空閒守護程式來服務建置請求,則可以並行產生多個守護程式。
此架構帶來以下優點:
用於運行實際建置的 JVM 不需要為每個建置重新啟動。
保存 Maven 插件類別的類別載入器在多個建置中進行快取。因此,插件 jar 只被讀取和解析一次。 Maven 插件的 SNAPSHOT 版本不會被快取。
JVM 內的即時 (JIT) 編譯器產生的本機程式碼也被保留。與普通 Maven 相比,JIT 編譯花費的時間較少。在重複建置期間,JIT 優化的程式碼立即可用。這不僅適用於來自 Maven 插件和 Maven Core 的程式碼,也適用於來自 JDK 本身的所有程式碼。
mvnd
在現有 Maven 的基礎上帶來了以下功能:
預設情況下, mvnd
使用多個 CPU 核心並行建置模組。已使用的核心數量由公式Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)
給出。如果您的原始程式碼樹不支援並行構建,請將-T1
傳遞到命令列以使您的構建串行。
改進的控制台輸出:我們認為基於庫存 Maven 的並行建置的輸出很難遵循。因此,我們實作了一個簡化的非捲動視圖,在單獨的行上顯示每個建置執行緒的狀態。這是在 24 核心機器上的樣子:
建置完成後,完整的 Maven 輸出將轉送到控制台。
mvnd
如果SDKMAN!支援您的作業系統,就像這樣簡單
sdk install mvnd
如果您過去曾使用過手動安裝,請確保~/.m2/mvnd.properties
中的設定仍然有意義。使用 SDKMAN!,通常根本不需要~/.m2/mvnd.properties
文件,因為JAVA_HOME
和MVND_HOME
都是由 SDKMAN! 管理的。
brew install mvndaemon/homebrew-mvnd/mvnd
注意:有兩個公式:安裝最新版本的mvnd
和安裝 1.x 行的mvnd@1
。
sudo port install mvnd
我們正在尋求捐款來支持 Chocolatey、Scoop 或 asdf。如果您想幫助我們…
或者,您可以如下設定完成:
# ensure that MVND_HOME points to your mvnd distribution, note that sdkman does it for you
$ echo ' source $MVND_HOME/bin/mvnd-bash-completion.bash ' >> ~ /.bashrc
bash
是目前唯一支援的 shell。
從 https://downloads.apache.org/maven/mvnd/ 下載適合您平台的最新 ZIP
解壓縮到您選擇的目錄
將bin
目錄加入PATH
或者,您可以建立~/.m2/mvnd.properties
並設定java.home
屬性,以防您不想設定JAVA_HOME
環境變數。
測試mvnd
是否有效:
$ mvnd --version
Maven Daemon 0.0.11-linux-amd64 (native)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.osx.OsXNativePty
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/ppalaga/orgs/mvnd/mvnd/daemon/target/maven-distro
Java version: 11.0.1, vendor: AdoptOpenJDK, runtime: /home/data/jvm/adopt-openjdk/jdk-11.0.1+13
Default locale: en_IE, platform encoding: UTF-8
OS name: " linux " , version: " 5.6.13-200.fc31.x86_64 " , arch: " amd64 " , family: " unix "
如果您使用的是 Windows 並看到一則訊息指出VCRUNTIME140.dll was not found
,則需要從 https://support.microsoft.com/en-us/help/2977003/the-latest-supported 安裝vc_redist.x64.exe
-視覺-C-下載。有關更多信息,請參閱 oracle/graal#1762。
如果您使用的是 macOS,則需要在解壓縮檔案後從所有檔案中刪除隔離標誌:
$ xattr -r -d com.apple.quarantine mvnd-xyz-darwin-amd64
mvnd
旨在接受與 stock mvn
相同的命令列選項(加上一些額外的內容 - 請參閱下文),例如:
mvnd verify
mvnd
特定選項--status
列出正在運行的守護程式
--stop
殺死所有正在運行的守護程式
mvnd --help
列印完整的選項列表
可以透過屬性檔提供配置。 Mvnd 從以下位置讀取屬性檔:
使用MVND_PROPERTIES_PATH
環境變數或mvnd.propertiesPath
系統變數提供的屬性路徑
位於[PROJECT_HOME]/.mvn/mvnd.properties
的本機屬性路徑
使用者屬性路徑位於: [USER_HOME]/.m2/mvnd.properties
系統屬性路徑位於: [MVND_HOME]/conf/mvnd.properties
在第一個檔案中定義的屬性將優先於排名較低的檔案中指定的屬性。
有些特殊屬性不遵循上述機制:
mvnd.daemonStorage
:此屬性定義 mvnd 儲存其檔案(登錄和守護程式日誌)的位置。此屬性只能在命令列上定義為系統屬性
mvnd.id
:此屬性在內部使用來識別正在建立的守護進程
mvnd.extClasspath
:指定 Maven 擴充類別路徑的內部選項
mvnd.coreExtensions
:內部選項,用於指定要註冊的 Maven 擴充列表
有關可用屬性的完整列表,請參閱 /dist/src/main/distro/conf/mvnd.properties。
mvnd
git
梅文
從 GitHub 下載並解壓縮 GraalVM CE
將JAVA_HOME
設定為您在上一個步驟中解壓縮 GraalVM 的位置。檢查java -version
輸出是否符合預期:
$ $JAVA_HOME /bin/java -version
openjdk version " 11.0.9 " 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
安裝native-image
工具:
$ $JAVA_HOME /bin/gu install native-image
native-image
可能需要安裝其他軟體,具體取決於您的平台 - 請參閱native-image
文件。
mvnd
$ git clone https://github.com/apache/maven-mvnd.git
$ cd maven-mvnd
$ mvn clean verify -Pnative
...
$ cd client
$ file target/mvnd
target/mvnd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=93a554f3807550a13c986d2af9a311ef299bdc5a, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ls -lh target/mvnd
-rwxrwxr-x. 1 ppalaga ppalaga 25M Jun 2 13:23 target/mvnd
請注意,如果您使用 Windows 作為作業系統,則建置maven-mvnd
需要滿足以下先決條件:具有工作負載「使用 C++ 進行桌面開發」的 Visual Studio 版本和單一元件「Windows Universal CRT SDK」。
mvnd
$ cp -R dist/target/mvnd-[version] [target-dir]
然後您只需將[target-dir]/bin
添加到您的PATH
並運行mvnd
即可。
我們很高興改進mvnd
,因此非常歡迎提供回饋!