💡 一则也许对你有用的小广告 🏆
欢迎飞飞程序员 ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论
截止目前, 飞飞 正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观
Maven (mvn) 是 Java 生态中最常用的构建工具之一,用于项目管理、依赖管理、构建、测试和部署。以下是 mvn 命令的详细用法,涵盖常用命令、参数、生命周期及实际示例。
1. Maven 核心概念
1.1 生命周期 (Lifecycle)
Maven 构建过程分为三个标准生命周期:
clean:清理项目(删除 target/ 目录)。
default(核心):编译、测试、打包、部署。
site:生成项目文档和报告。
每个生命周期包含多个阶段(phase),按顺序执行。
1.2 常用构建阶段
阶段 (Phase)
作用
validate
验证项目配置是否正确。
compile
编译主代码(src/main/java → target/classes)。
test
运行单元测试(src/test/java)。
package
打包(生成 JAR/WAR 等文件到 target/)。
verify
运行集成测试。
install
将构建的包安装到本地仓库(~/.m2/repository)。
deploy
将包部署到远程仓库(如 Nexus、Artifactory)。
2. 常用 mvn 命令
2.1 基础构建命令
命令
作用
mvn clean
清理 target/ 目录。
mvn compile
仅编译主代码。
mvn test
编译 + 运行测试。
mvn package
编译 + 测试 + 打包(生成 JAR/WAR)。
mvn install
编译 + 测试 + 打包 + 安装到本地仓库。
mvn deploy
编译 + 测试 + 打包 + 安装 + 部署到远程仓库。
2.2 跳过测试
命令
区别
mvn package -DskipTests
跳过测试执行,但会编译测试代码。
mvn package -Dmaven.test.skip=true
完全跳过测试(不编译也不执行)。
2.3 指定环境/配置文件
mvn clean install -Pprod # 使用 `prod` 配置文件(定义在 pom.xml 的 <profiles>)
2.4 多模块构建
mvn clean install -pl module1,module2 # 仅构建指定模块
mvn clean install -pl module1 -am # 构建 module1 及其依赖模块
2.5 强制更新依赖
mvn clean install -U # 强制更新 SNAPSHOT 依赖
2.6 调试模式
mvn -X clean install # 显示详细日志(Debug 模式)
3. 高级用法
3.1 生成项目文档
mvn site # 生成项目站点(HTML 报告)
mvn javadoc:javadoc # 生成 JavaDoc
3.2 依赖分析
mvn dependency:tree # 查看依赖树
mvn dependency:analyze # 分析未使用的依赖
3.3 运行特定 Main 类
mvn exec:java -Dexec.mainClass="com.example.Main"
3.4 构建 Docker 镜像
mvn clean package docker:build # 需配合 `docker-maven-plugin`
3.5 构建不同版本
mvn versions:set -DnewVersion=1.1.0 # 修改项目版本
4. 常见问题
4.1 构建失败怎么办?
- 查看日志:
mvn clean install -X(Debug 模式)。
- 检查依赖冲突:
mvn dependency:tree。
- 清理缓存:删除
~/.m2/repository 中的冲突依赖。
4.2 如何加速构建?
4.3 如何跳过 Checkstyle/PMD?
mvn install -Dcheckstyle.skip -Dpmd.skip
5. 总结
场景
命令
清理 + 编译
mvn clean compile
编译 + 测试
mvn test
打包(跳过测试)
mvn package -DskipTests
安装到本地仓库
mvn install
部署到远程仓库
mvn deploy
多模块构建
mvn install -pl module1 -am
强制更新依赖
mvn install -U
查看依赖树
mvn dependency:tree
掌握这些命令后,可以高效管理 Java 项目的构建、测试和部署流程! 🚀