Maven 核心概念速览
在深入命令之前,先快速回顾几个核心概念,这能帮助你更好地理解命令的作用:

- POM (Project Object Model):
pom.xml文件,是 Maven 项目的核心配置文件,定义了项目的基本信息、依赖、插件、构建配置等。 - 生命周期: Maven 的构建过程是一系列有序的阶段,主要有三个内置的生命周期:
default: 最核心的生命周期,包括compile,test,package,install,deploy等阶段。clean: 用于清理项目,如删除target目录。site: 用于生成项目站点文档。
- 阶段: 生命周期中的一个步骤,
compile。 - 目标: 阶段的具体实现,一个阶段可以绑定一个或多个目标。
package阶段通常绑定maven-jar-plugin:jar(对于 Java 项目) 或maven-war-plugin:war(对于 Web 项目) 目标。 - 插件: 用于执行特定任务(如编译、打包、代码检查等)的工具,目标通常由插件提供。
- 仓库: 存放依赖和插件的地方,主要有:
- 本地仓库: 你本机上的一个目录,用于缓存下载的依赖和插件。
- 远程仓库: 如 Maven 中央仓库,或私服,当本地仓库没有所需依赖时,Maven 会从远程仓库下载。
Maven 命令大全
命令的基本格式是:mvn [options] [goal(s)]
项目创建与构建
这是最常用的一组命令,用于创建新项目和进行日常构建。
| 命令 | 说明 | 示例 |
|---|---|---|
mvn archetype:generate |
(旧版) 交互式创建 Maven 项目骨架。 | mvn archetype:generate |
mvn -B archetype:generate |
(旧版) 非交互式创建项目,需指定参数。 | mvn -B archetype:generate -DgroupId=com.mycompany -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false |
mvn -DarchetypeGroupId=... -DarchetypeArtifactId=... ... |
(新版) 直接指定参数创建项目,更推荐。 | mvn -B org.apache.maven.archetypes:maven-archetype-quickstart:generate -DgroupId=com.example -DartifactId=my-first-app |
mvn clean |
执行 clean 生命周期,删除 target 目录。 |
mvn clean |
mvn compile |
执行 default 生命周期的 compile 阶段,编译 src/main/java 下的源代码。 |
mvn compile |
mvn test-compile |
编译 src/test/java 下的测试代码。 |
mvn test-compile |
mvn test |
执行 test 阶段,编译并运行所有测试用例。 |
mvn test |
mvn package |
执行 package 阶段,编译代码、运行测试,并将项目打包(如 JAR, WAR)。 |
mvn package |
mvn install |
执行 install 阶段,打包后将项目安装到本地仓库,供其他本地项目引用。 |
mvn install |
mvn deploy |
执行 deploy 阶段,将打包好的构件部署到远程仓库(如私服)。 |
mvn deploy |
mvn verify |
执行集成测试,并运行检查,确保质量达标。 | mvn verify |
mvn site |
生成项目站点,包含报告(如 Javadoc, Test Report)。 | mvn site |
常用组合:
| 命令 | 说明 |
|---|---|
mvn clean compile |
清理并编译项目。 |
mvn clean package |
清理、编译、测试并打包,这是最常用的构建组合之一。 |
mvn clean install |
清理、编译、测试、打包并安装到本地仓库。 |
依赖管理
用于管理项目的外部库。

| 命令 | 说明 | 示例 |
|---|---|---|
mvn dependency:tree |
以树形结构显示项目的所有依赖及其传递性依赖。 | mvn dependency:tree |
mvn dependency:resolve |
解析项目依赖,并将其下载到本地仓库。 | mvn dependency:resolve |
mvn dependency:copy-dependencies |
将所有依赖复制到指定目录(默认是 target/dependencies)。 |
mvn dependency:copy-dependencies -DoutputDirectory=target/lib |
mvn dependency:analyze |
分析依赖,找出 used but undeclared (使用但未声明) 和 declared but unused (声明但未使用) 的依赖。 |
mvn dependency:analyze |
mvn enforcer:enforce |
使用 maven-enforcer-plugin 强制执行某些规则,如禁止使用旧版依赖。 |
mvn enforcer:enforce (需在 pom.xml 中配置规则) |
mvn versions:display-dependency-updates |
检查依赖是否有可用的新版本。 | mvn versions:display-dependency-updates (需先配置 versions 插件) |
插件
用于执行各种构建任务。
| 命令 | 说明 | 示例 |
|---|---|---|
mvn plugin:help |
查看插件的详细信息,包括其目标和参数。 | mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin -Ddetail |
mvn [plugin-name]:[goal-name] |
直接执行插件的某个目标。 | mvn tomcat7:run (启动 Tomcat 服务器) |
mvn exec:java |
使用 maven-exec-plugin 直接运行一个 Java 类的 main 方法。 |
mvn exec:java -Dexec.mainClass="com.example.App" |
信息与帮助
用于获取项目信息或帮助。
| 命令 | 说明 | 示例 |
|---|---|---|
mvn help:system |
打印所有可用的环境变量和系统属性,非常有用于调试环境问题。 | mvn help:system |
mvn help:effective-pom |
打印项目的有效 POM,即合并了所有父 POM 和默认配置后的最终 POM。 | mvn help:effective-pom |
mvn help:effective-settings |
打印有效的 settings.xml 文件内容。 |
mvn help:effective-settings |
mvn archetype:generate -Dfilter=<keyword> |
创建项目时,通过关键词过滤可用的骨架。 | mvn archetype:generate -Dfilter=webapp |
mvn validate |
验证项目是否正确,以及所有信息是否完整。 | mvn validate |
高级功能
| 命令 | 说明 | 示例 |
|---|---|---|
mvn clean install -DskipTests |
跳过测试,编译并安装,但不运行测试用例。 | mvn clean install -DskipTests |
mvn clean install -Dmaven.test.skip=true |
跳过测试编译和执行,比 -DskipTests 更彻底。 |
mvn clean install -Dmaven.test.skip=true |
mvn clean package -P<profile_id> |
激活 Profile,在构建时使用指定的 Profile。 | mvn clean package -Pprod |
mvn clean install -DforkCount=0 |
单线程测试,对于某些 IDE 集成问题或调试时有用。 | mvn clean install -DforkCount=0 |
mvn clean compile -q |
安静模式,只输出错误或警告信息。 | mvn clean compile -q |
mvn clean compile -X |
调试模式,输出 Maven 的调试信息,用于排查依赖问题。 | mvn clean compile -X |
mvn clean compile -B |
批处理模式,非交互式,适合在 CI/CD 环境中使用。 | mvn clean install -B |
mvn clean compile -Dmaven.repo.local=/path/to/local/repo |
指定本地仓库路径。 | mvn clean compile -Dmaven.repo.local=/my/custom/repo |
mvn clean compile -Dcheckstyle.skip=true |
跳过插件执行,跳过 Checkstyle 代码检查。 | mvn clean install -Dcheckstyle.skip=true -Dspotbugs.skip=true |
常用 Maven 生命周期阶段速查表
| 阶段 | 描述 | 通常绑定插件目标 |
|---|---|---|
validate |
验证项目是否正确,以及所有信息是否完整。 | - |
initialize |
初始化构建状态,例如设置属性。 | - |
generate-sources |
生成任何包含在编译阶段中的源代码。 | - |
process-sources |
处理源代码,过滤任何值。 | maven-resources-plugin:resources |
generate-resources |
生成包含在包中的任何资源。 | maven-resources-plugin:resources |
process-resources |
处理资源文件,过滤任何值。 | maven-resources-plugin:resources |
compile |
编译项目的源代码。 | maven-compiler-plugin:compile |
process-classes |
处理编译生成的文件,对 Java 类进行字节码增强。 | - |
generate-test-sources |
生成任何包含在编译阶段中的测试源代码。 | - |
process-test-sources |
处理测试源代码,过滤任何值。 | maven-resources-plugin:testResources |
generate-test-resources |
创建测试资源。 | maven-resources-plugin:testResources |
process-test-resources |
处理测试资源文件,过滤任何值。 | maven-resources-plugin:testResources |
test-compile |
编译测试源代码。 | maven-compiler-plugin:testCompile |
process-test-classes |
处理编译生成的测试文件,对 Java 测试类进行字节码增强。 | - |
test |
使用适当的单元框架运行测试。 | maven-surefire-plugin:test |
prepare-package |
在实际打包之前执行任何必要的操作为打包做准备。 | - |
package |
将编译后的代码打包成可分发的格式,如 JAR、WAR。 | maven-jar-plugin:jar / maven-war-plugin:war |
pre-integration-test |
执行集成测试所需的操作,例如设置所需的环境。 | - |
integration-test |
处理和部署包到集成测试可以运行的环境。 | - |
post-integration-test |
执行集成测试后需要的操作,例如清理环境。 | - |
verify |
运行任何检查以验证包是否有效,并满足质量标准。 | maven-checkstyle-plugin:check / maven-failsafe-plugin:verify |
install |
将包安装到本地仓库,以供其他项目作为依赖使用。 | maven-install-plugin:install |
deploy |
将最终包复制到远程仓库,以供其他开发人员和项目使用。 | maven-deploy-plugin:deploy |
总结与最佳实践
- 善用
mvn help:effective-pom: 当你的pom.xml配置变得复杂时,这个命令可以帮你看到最终的、合并后的配置,是排查问题的利器。 - 理解生命周期: 理解
clean,default,site三个生命周期以及它们内部的阶段,是掌握 Maven 的关键,知道mvn package内部做了什么(validate,initialize, ...,compile,test,package),你就不会滥用命令。 - 不要滥用
mvn install: 在多模块项目中,如果你只想编译和测试当前模块,而不是把它安装到本地仓库,使用mvn clean compile或mvn clean test会更快。 - 依赖分析: 定期运行
mvn dependency:analyze,保持依赖列表的整洁,避免引入未使用的库。 - 使用 Profile: 为不同环境(开发、测试、生产)配置不同的参数,通过
-P参数激活,是管理环境差异的最佳实践。
希望这份大全能帮助你更高效地使用 Maven!

