maven

Maven 3.9+

Maven CLI 命令快速參考:專案生命週期階段、依賴管理、plugin、多模組反應器、儲存庫部署與除錯——附常用參數與實作範例。

34 條命令

生命週期階段

mvn validate

驗證專案結構:下載 metadata、解析 `pom.xml`、健全性檢查依賴。

-N 只處理根反應器(不處理子模組);-f <pom> 使用其他 POM;-P<profile> 啟用 profile

mvn validate
mvn compile

把專案主要的 `src/main/java` 編譯為 `target/classes`。使用設定的 JDK 與 `maven-compiler-plugin`。

-DskipTests;-T 4 平行建置執行緒;-q 安靜

mvn compile
mvn test

對編譯後的主要與測試源碼執行單元測試(Surefire)。會跳過 `failsafe`(整合測試)——整合測試請用 `mvn verify`。

-Dtest=ClassName;-Dtest=Class#method;-DfailIfNoTests=false;-Dsurefire.useFile=false

mvn test -Dtest=UserServiceTest
mvn package

執行所有前置階段,然後把編譯結果打包成 JAR/WAR/EAR,置於 `target/` 下。

-DskipTests;-Dpackaging=jar

mvn package -DskipTests
mvn verify

執行 package 並加上整合測試(Failsafe),然後驗證一切就緒可發佈。**不會**執行 install 或 deploy。

-DskipITs;-DskipTests

mvn verify -DskipITs
mvn install

執行 verify,然後把產生的構件複製到本地 Maven 儲存庫(`~/.m2/repository`),讓其他本地專案可以依賴它。

mvn install -DskipTests
mvn deploy

建置並把構件推送到 `pom.xml` 中 `<distributionManagement>` 宣告的遠端儲存庫(Nexus/Artifactory/經 Sonatype 推到 Maven Central)。

-DskipTests;-P release 使用 release profile

mvn deploy -P release -DskipTests
mvn clean

刪除 `target/` 目錄,從乾淨狀態重新開始。

mvn clean
mvn clean install

先清空 `target/`,再一路執行到 `install`。最常見的「從頭重建」指令。

-U 強制更新 snapshot 依賴

mvn clean install -U

依賴

mvn dependency:tree

印出已解析的依賴樹(含衝突解決)——排查版本錯位造成的 `NoSuchMethodError` 必備。

-Dincludes=<groupId>[:<artifactId>[:<version>]];-Dverbose

mvn dependency:tree -Dincludes=com.fasterxml.jackson.core
mvn dependency:resolve

把所有依賴解析到本地儲存庫,而不執行生命週期。

mvn dependency:resolve
mvn dependency:analyze

比對宣告的 `<dependencies>` 與實際 `import`/`package` 使用情況;標記未使用/未宣告的依賴。

mvn dependency:analyze
mvn dependency:list

把建置中每個已解析依賴列為單純的 `groupId:artifactId:type:version` 行。

mvn dependency:list | grep slf4j
mvn versions:display-dependency-updates

列出所有在已設定儲存庫中有更新版本可用的依賴。

mvn versions:display-dependency-updates

多模組

mvn -pl <module> <goal>

對一個或多個特定子模組執行目標(依 artifact ID,逗號分隔)。

-am 同時建置目標所依賴的模組

mvn -pl user-service,order-service -am test
mvn -pl <module> -am <goal>

建置指定模組及其所有依賴的模組。`-amd`(also-make-dependents)為反向操作。

mvn -pl web -am package
mvn -T 4 <phase> / mvn -T 1C <phase>

平行反應器:`-T 4` 使用 4 個執行緒;`-T 1C` 每個 CPU 核心一個執行緒。加速多模組建置。

mvn -T 1C clean install

儲存庫

mvn help:effective-pom

把最終合併的 POM(super-POM + parent POM + 啟用的 profiles + 當前設定)印成單一檔案——建置時的唯一真實來源。

-Doutput=<file>

mvn help:effective-pom > effective.xml
mvn help:effective-settings

印出合併後的 `~/.m2/settings.xml` + 全域 + CLI `--settings`。排查 mirror/憑證解析時很有用。

mvn help:effective-settings -s ./settings.xml
mvn -s <settings.xml> <phase>

為單次建置覆寫使用者 `settings.xml`——適合使用鏡像儲存庫的 CI。

mvn -s ./.mvn/settings.xml deploy

Plugins

mvn <plugin>:<goal>

直接執行單一 plugin goal。常見:`compiler:compile`、`surefire:test`、`jar:jar`、`deploy:deploy`、`dependency:tree`。

-D<param>=<value> goal 參數;-X 除錯(非常詳細)

mvn compiler:compile && mvn surefire:test -Dtest=*ServiceTest
mvn help:describe -Dplugin=<id>

顯示 plugin 的所有 goal 與參數。`<id>` 替換為 `groupId:artifactId`。

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin

Profiles

mvn -P<profile1>,<profile2> <phase>

啟用 `pom.xml` 或 `settings.xml` 中 `<profiles>` 宣告的一個或多個 profile。

mvn -Pprod,fast test
mvn -P!<profile> <phase>

停用預設情況下會被啟用的 profile。

mvn -P!javadoc package

除錯

mvn -X <phase>

啟用除錯日誌——印出每個 plugin 執行、儲存庫查詢與下載 URL。可導入檔案。

-e 錯誤時輸出完整堆疊追蹤

mvn -X test > mvn-debug.log 2>&1
mvn -e <phase>

任何失敗都印出完整堆疊追蹤。與 `-X` 組合可取得最大細節。

mvn -e -X deploy
mvnDebug <phase>

以 JDWP socket(預設埠 8000)暫停 JVM 啟動建置,方便在 Maven JVM 的第 1 行掛上除錯器。

mvnDebug test

Wrapper

./mvnw <phase>

透過 Maven Wrapper 執行建置——使用 `.mvn/wrapper/maven-wrapper.properties` 中鎖定的 Maven 版本。請務必把 wrapper 簽入版本庫。

-Dmaven.version=<ver> 為此次執行升級 Maven

./mvnw clean install
mvn wrapper:wrapper

產生/更新 Maven Wrapper 檔案(`mvnw`、`mvnw.cmd`、`.mvn/wrapper/*`)。

-Dmaven=<version> 鎖定 Maven 發行版本

mvn wrapper:wrapper -Dmaven=3.9.6

雜項

mvn --version

印出 Maven 版本、JDK、OS 與地區設定。

mvn --version
mvn --help

列出所有 CLI 旗標與支援的屬性。

mvn --help | head -40
mvn -B <phase>

批次/非互動模式——停用互動式提示與彩色輸出。CI 中用來避免因缺少屬性而卡住。

mvn -B -ntp clean verify
mvn -ntp <phase>

停用新的傳輸進度條(CI 推薦;減少日誌噪音,避免在慢速鏡像下 CPU 飆升)。

mvn -B -ntp clean deploy
mvn -o <phase>

離線模式——絕不連線遠端儲存庫。若必要構件不在本地儲存庫,立即失敗。

mvn -o test

相關命令速查

關於 Maven

Apache Maven 是 Java 專案管理與理解工具,於 2002 年首次亮相(最初由 Jason van Zyl 建立)。它以宣告式的 `pom.xml`(Project Object Model)描述專案,並執行有明確定義的建置生命週期,預設有八個階段:`validate`、`compile`、`test`、`package`、`verify`、`install`、`deploy`。Maven 是第一個主流 Java 建置工具,強制使用單一的儲存庫佈局(`groupId:artifactId:version`),並從遠端儲存庫(Maven Central)解析依賴。目前穩定版線為 Maven 3.9+。Maven 會把構件下載到本地儲存庫(預設 `~/.m2/repository`)並進行傳遞性解析,支援可選的 scope(`compile`、`provided`、`runtime`、`test`、`system`、`import`)。plugin 可擴充生命週期;常見的包括 `maven-compiler-plugin`、`maven-surefire-plugin`、`maven-jar-plugin` 與 `maven-deploy-plugin`。Profiles(`-P`)可依環境覆寫預設值。Maven 不會上傳源碼——`deploy` 只會發佈 `distributionManagement` 中設定的構件(jar/war/pom)。Wrapper 腳本(`mvnw`/`mvnw.cmd`)為每個專案綁定一個 Maven 版本,以鎖定工具鏈。

速查頁版本 1.0.0