Maven 常见命令详解
Maven 命令的核心格式是:mvn [options] [<goal(s)>] [<phase(s)>]。理解生命周期 (Lifecycle) 和阶段 (Phase) 是掌握 Maven 命令的关键。
一、Maven 核心概念:生命周期和阶段
Maven 的生命周期由一系列阶段组成,执行某个阶段会自动执行它之前的所有阶段。主要生命周期包括:
- clean:清理项目
pre-clean,clean,post-clean
- default (或 build):构建项目(最核心)
- 关键阶段:
validate->compile->test->package->verify->install->deploy
- 关键阶段:
- site:生成项目站点文档
pre-site,site,post-site,site-deploy
命令的本质:当你运行 mvn install 时,Maven 会按顺序执行从 validate 到 install 的所有阶段。
二、最常用命令详解
1. 项目编译与打包
-
mvn compile- 作用:编译项目的主源代码,编译结果输出到
target/classes目录。 - 对应阶段:
compile
- 作用:编译项目的主源代码,编译结果输出到
-
mvn test- 作用:运行项目的测试用例(使用如 JUnit 等框架)。它会先自动执行
compile。 - 对应阶段:
test - 输出:测试报告位于
target/surefire-reports/
- 作用:运行项目的测试用例(使用如 JUnit 等框架)。它会先自动执行
-
mvn package- 作用:将编译后的代码打包成可分发格式(JAR, WAR 等),具体格式由
pom.xml中的<packaging>指定。它会先自动执行test。 - 对应阶段:
package - 输出:打包文件位于
target/目录下(如my-project-1.0.0.jar)。
- 作用:将编译后的代码打包成可分发格式(JAR, WAR 等),具体格式由
-
mvn install- 作用:将打包好的文件安装到本地仓库。这样,本地其他 Maven 项目就可以直接引用这个构件作为依赖了。它会先自动执行
package。 - 对应阶段:
install - 场景:当你开发一个公共模块,并被其他本地项目依赖时,需要先
install。
- 作用:将打包好的文件安装到本地仓库。这样,本地其他 Maven 项目就可以直接引用这个构件作为依赖了。它会先自动执行
-
mvn deploy- 作用:将最终的构件(打包文件)部署到远程仓库(如 Nexus、Artifactory),供团队其他成员或整个公司使用。
- 对应阶段:
deploy - 前提:需要在
pom.xml中配置<distributionManagement>。
-
mvn clean- 作用:清理项目,删除
target目录。通常与其他命令结合使用,以确保全新的构建。 - 对应阶段:
clean - 常用组合:
mvn clean compile:先清理再编译。mvn clean package:先清理再打包(最常用组合之一)。mvn clean install:先清理再安装(最常用组合之一)。
- 作用:清理项目,删除
2. 依赖管理
-
mvn dependency:tree- 作用:以树形结构展示项目的所有依赖(包括传递性依赖)。这是解决 JAR 包冲突的终极利器!
- 常用参数:
-Dincludes=groupId:artifactId:过滤显示特定依赖,例如mvn dependency:tree -Dincludes=org.springframework。-Dverbose:显示更详细的信息,包括被忽略的重复/冲突依赖。
-
mvn dependency:analyze- 作用:分析项目依赖,检查哪些已声明的依赖未被使用,以及哪些未声明的依赖但已被代码使用。
-
mvn dependency:resolve- 作用:列出所有已解析的依赖(下载到本地的依赖)。
3. 插件与工具
-
mvn archetype:generate- 作用:使用 Maven 原型(模板)快速创建一个新项目骨架。会以交互方式询问 groupId, artifactId, version 等信息。
-
mvn help:effective-pom- 作用:显示项目的有效 POM。有效 POM 是当前 POM、所有父 POM 和超级 POM(Maven 默认配置)合并后的最终结果,对于调试 POM 配置问题非常有用。
三、实用参数/选项 (Options)
这些参数可以附加在任何命令后面,以实现特定功能。
-
-DskipTests或-Dmaven.test.skip=true- 作用:跳过测试。
package和install时会编译测试代码,但不执行测试。 - 区别:
-DskipTests会编译测试类但不运行;-Dmaven.test.skip=true完全跳过测试的编译和执行。
- 作用:跳过测试。
-
-P<profile-id>- 作用:激活指定的构建剖面 (Profile)。Profile 允许你为不同环境(如开发、测试、生产)定义不同的配置。
- 示例:
mvn clean package -Pprod激活id为prod的 profile 进行打包。
-
-X或-e- 作用:开启调试/异常输出。当命令执行失败时,使用这些参数可以打印出非常详细的堆栈跟踪和错误信息,便于排查问题。
-X:Debug 模式,输出大量执行日志。-e:输出错误堆栈信息。
-
-pl <module_name>和-am- 作用:在多模块项目中,仅对指定模块及其依赖的模块执行操作。
-pl:指定要构建的模块(Project List)。-am:同时构建该模块所依赖的模块(Also Make)。- 示例:在根目录执行
mvn install -pl module-a -am,Maven 会先安装module-a依赖的其他模块,然后再安装module-a本身。
-
-U- 作用:强制检查远程仓库的更新(Update snapshots)。对于依赖了快照版本(SNAPSHOT)的项目,这个参数可以确保拉取到最新的快照构建。
四、常用命令组合总结
| 命令组合 | 作用 |
|---|---|
mvn clean package | (最常用) 清理并打包项目,生成 JAR/WAR 文件。 |
mvn clean install | (最常用) 清理并安装到本地仓库,供其他本地项目依赖。 |
mvn clean package -DskipTests | 清理并打包,但跳过所有测试(常用于需要快速打包时)。 |
mvn clean deploy -Pprod | 清理项目,激活 prod 配置文件,并部署到远程仓库。 |
mvn dependency:tree -Dincludes=log4j | 分析项目中与 log4j 相关的所有依赖,用于排查冲突。 |
mvn compile exec:java -Dexec.mainClass="com.example.Main" | 编译并运行指定的主类(需要 exec-maven-plugin 插件)。 |
希望这份详解能帮助您更好地理解和使用 Maven!
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19120625

浙公网安备 33010602011771号