Maven 常用命令全解析:从基础到进阶操作
Maven 命令是项目构建和管理的核心工具,掌握常用命令能显著提升开发效率。本文将按功能分类梳理 Maven 命令,涵盖基础构建、依赖管理、项目创建、测试与发布等场景,并解释其底层原理和适用场景。
基础构建命令
这类命令对应 Maven 生命周期的核心阶段,用于完成项目的编译、测试、打包等基础操作。
| 命令 | 功能描述 | 底层原理 |
|---|---|---|
mvn -v |
查看 Maven 版本及环境信息(如 Java 版本、安装路径) | 输出 maven-home、java-home 等配置,验证 Maven 环境是否正确。 |
mvn clean |
清理项目(删除 target 目录,即编译、打包生成的文件) |
触发 Clean 生命周期的 pre-clean 和 clean 阶段,调用 maven-clean-plugin:clean 目标。 |
mvn compile |
编译主程序源码(输出到 target/classes) |
触发 Default 生命周期的 compile 阶段,调用 maven-compiler-plugin:compile 目标。 |
mvn test-compile |
编译测试源码(输出到 target/test-classes) |
触发 test-compile 阶段,调用 maven-compiler-plugin:testCompile 目标。 |
mvn test |
执行单元测试(运行 src/test/java 中的测试用例) |
触发 test 阶段,调用 maven-surefire-plugin:test 目标,默认生成测试报告到 target/surefire-reports。 |
mvn package |
打包项目(如 Jar、War,输出到 target 目录) |
触发 package 阶段,根据项目类型(pom.xml 中 <packaging>)调用对应插件(如 maven-jar-plugin:jar)。 |
mvn install |
将包安装到本地仓库(供本地其他项目依赖) | 触发 install 阶段,调用 maven-install-plugin:install 目标,将包复制到本地仓库(默认 ~/.m2/repository)。 |
mvn deploy |
将包部署到远程仓库(供团队共享) | 触发 deploy 阶段,调用 maven-deploy-plugin:deploy 目标,需在 pom.xml 中配置 <distributionManagement> 远程仓库地址。 |
常用组合命令
1 | # 清理并打包(跳过测试,适合快速构建) |
测试相关命令
Maven 提供丰富的测试命令,支持跳过测试、生成测试报告等功能。
| 命令 | 功能描述 | 注意事项 |
|---|---|---|
mvn test -Dtest=TestClassName |
执行指定测试类(如 TestClassName) |
支持通配符,如 mvn test -Dtest=*ServiceTest 执行所有以 ServiceTest 结尾的测试类。 |
mvn test -Dtest=TestClassName#methodName |
执行测试类中的指定方法 | 仅支持 JUnit 4+ 和 TestNG,如 mvn test -Dtest=UserServiceTest#testLogin。 |
mvn package -DskipTests |
打包时跳过测试执行(但仍编译测试代码) | 适用于需要测试类编译通过,但暂时不执行测试的场景。 |
mvn package -Dmaven.test.skip=true |
完全跳过测试(不编译也不执行测试代码) | 比 -DskipTests 更彻底,适合快速打包(如前端依赖的后端 Jar 包)。 |
mvn cobertura:cobertura |
生成测试覆盖率报告(需添加 cobertura 插件) | 报告输出到 target/site/cobertura,包含类、方法的覆盖率统计。 |
依赖管理命令
依赖管理是 Maven 的核心功能,这类命令用于分析、查看项目依赖。
| 命令 | 功能描述 | 实用场景 |
|---|---|---|
mvn dependency:list |
列出项目所有依赖(包括传递依赖) | 快速查看项目依赖的完整列表,包含坐标和版本。 |
mvn dependency:tree |
以树形结构展示依赖层级关系 | 排查依赖冲突(如同一 Jar 包的不同版本),清晰显示依赖传递路径。 |
mvn dependency:analyze |
分析依赖使用情况 | 输出两类问题: 1. Used undeclared dependencies:项目中使用但未显式声明的依赖(依赖传递引入)。 2. Unused declared dependencies:显式声明但未使用的依赖(需谨慎删除,可能被间接使用)。 |
mvn dependency:copy-dependencies |
将项目依赖复制到指定目录(默认 target/dependency) |
用于手动管理依赖(如部署时拷贝到 lib 目录),可通过插件配置自定义输出路径。 |
mvn install:install-file -Dfile=xxx.jar -DgroupId=com.example -DartifactId=demo -Dversion=1.0 -Dpackaging=jar |
手动安装本地 Jar 包到本地仓库 | 处理无法从远程仓库下载的 Jar 包(如第三方非开源 SDK)。 |
项目创建与信息查询命令
用于创建项目、查看项目配置等。
| 命令 | 功能描述 | 示例 |
|---|---|---|
mvn archetype:generate -DgroupId=com.example -DartifactId=myproject -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0-SNAPSHOT |
创建普通 Java 项目 | -DarchetypeArtifactId 指定骨架,maven-archetype-webapp 用于创建 Web 项目。 |
mvn help:effective-pom |
查看项目的有效 POM(合并父 POM 和 Super POM 后的完整配置) | 排查配置继承问题(如依赖、插件配置的来源)。 |
mvn help:active-profiles |
查看当前激活的 Profile | 验证多环境配置是否生效(如开发 / 生产环境的 Profile 是否正确激活)。 |
mvn help:all-profiles |
列出项目所有定义的 Profile | 查看 pom.xml 和 settings.xml 中配置的所有环境 Profile。 |
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin -Ddetail |
查看插件详情(包括目标、参数) | 学习插件配置(如查看 maven-compiler-plugin 的 source、target 参数含义)。 |
站点与发布命令
用于生成项目文档和发布站点。
| 命令 | 功能描述 | 说明 |
|---|---|---|
mvn site |
生成项目站点文档(如依赖报告、测试报告) | 需配置 maven-site-plugin,输出到 target/site。 |
mvn site-deploy |
将站点部署到远程服务器(如 Nginx、GitHub Pages) | 需在 pom.xml 中配置 <distributionManagement> 的站点部署地址。 |
mvn release:prepare |
准备版本发布(自动升级版本号、打标签) | 用于规范发布流程,需配置 SCM(源码管理)信息(如 Git 仓库地址)。 |
mvn release:perform |
执行发布(从标签检出代码并部署到远程仓库) | 通常在 release:prepare 之后执行,完成正式版本的发布。 |
命令使用技巧
参数优先级:命令行参数(如
-DskipTests)>pom.xml配置 >settings.xml配置。调试模式:添加-X或—debug查看详细执行日志(如排查依赖冲突、插件错误):
1
mvn clean package -X # 输出调试日志
多命令组合:按顺序执行多个命令,用空格分隔(如
mvn clean test package)。激活 Profile:用
-P参数指定激活的环境(如mvn package -Ptest激活测试环境)。
v1.3.10