一、Maven概述
Maven,是一个专为Java平台设计的项目管理和构建工具。其核心思想在于“约定优于配置,通过提供一套默认的构建和依赖管理规则,降低了项目配置的复杂性,使开发者能够专注于业务逻辑的实现。Maven不仅支持项目的构建、依赖管理,还涵盖了项目文档生成、版本控制集成、部署发布等多个方面,为Java项目的全生命周期管理提供了全面的解决方案。
Maven 生命周期通俗解释
想象你在开一家餐厅,Maven 的三种生命周期就像是三种不同规模的开业准备流程:
🧹 Clean 生命周期——大扫除
通俗理解:彻底清理厨房,准备全新开始
| 阶段 | 餐厅比喻 | 实际作用 |
|---|---|---|
| pre-clean | 戴上手套、拿出清洁工具 | 准备清理环境 |
| clean | 把灶台、案板全部擦干净,扔掉昨天的剩菜 | 删除 target/ 目录,清除所有编译好的 class 文件和打包好的 jar/war |
| post-clean | 检查是否打扫干净,把工具放回原位 | 清理完成后的收尾工作 |
为什么需要 clean?
- 避免新旧代码混在一起(比如你改了代码,但旧的 class 文件还在,可能跑的还是旧代码)
- 解决一些莫名其妙的编译问题
日常用法:
mvn clean
执行后,target/ 目录消失,项目回到刚下载时的状态。
🏗️ Default 生命周期——从备菜到上桌的全流程
通俗理解:从买菜、洗菜、切菜、炒菜到装盘上桌的完整烹饪流程
这是 Maven 最常用的生命周期,包含 14 个阶段,但你不需要记住所有,只需要知道几个关键节点:
核心阶段(你平时用的那些)
| 阶段 | 餐厅比喻 | 实际作用 | 命令 |
|---|---|---|---|
| validate | 确认菜单没问题,厨房有水有电 | 检查项目配置是否正确 | 自动执行 |
| compile | 洗菜切菜 | 把 .java 编译成 .class | mvn compile |
| test | 尝一口菜的味道 | 运行单元测试,确保代码没问题 | mvn test |
| package | 把菜装盘 | 打包成 jar/war | mvn package |
| verify | 服务员检查菜品质量 | 运行集成测试,检查包是否合格 | 自动执行 |
| install | 把菜放到自家冰箱 | 安装到本地仓库,供本机其他项目用 | mvn install |
| deploy | 把菜送到其他餐厅 | 部署到远程仓库,供团队其他人用 | mvn deploy |
📦 mvn clean package 详解
这是一个组合命令,相当于:
- 先大扫除(clean):把旧菜全部倒掉
- 重新做饭(package):
- 备菜(validate)
- 洗菜切菜(compile)
- 尝味道(test)
- 装盘(package)
输出结果:在 target/ 目录下生成一个完整的 JAR 或 WAR 包,可以直接拿去部署。
📄 Site 生命周期——写菜单和开店宣传
通俗理解:打印菜单、制作店铺宣传单、发广告
| 阶段 | 餐厅比喻 | 实际作用 |
|---|---|---|
| pre-site | 准备打印机和纸张 | 准备生成文档的环境 |
| site | 打印菜单、制作宣传单 | 生成项目文档网站(API文档、报告等) |
| post-site | 检查菜单有没有错别字 | 文档生成后的收尾 |
| site-deploy | 把菜单贴到店门口、发传单 | 把生成的文档发布到服务器 |
什么时候用?
- 你要生成项目的 API 文档给团队看
- 你要制作项目的展示网站
- 开源项目需要发布文档到 GitHub Pages
命令:
mvn site # 生成文档(在 target/site/ 目录下)
mvn site-deploy # 生成并发布文档
🎯 一句话总结三种生命周期
| 生命周期 | 通俗比喻 | 核心作用 | 常用命令 |
|---|---|---|---|
| Clean | 大扫除 | 清空旧的构建产物 | mvn clean |
| Default | 做饭全过程 | 编译、测试、打包、安装、部署 | mvn compile / mvn package / mvn install |
| Site | 写菜单、发传单 | 生成项目文档网站 | mvn site |
🍳 最常用的组合(你每天都会用到)
# 只编译
mvn compile
# 只测试
mvn test
# 先清空,再打包(最常用)
mvn clean package
# 先清空,再安装到本地仓库
mvn clean install
# 先清空,再部署到远程仓库
mvn clean deploy
📊 最终对比表
| 命令 | 做了什么 | 结果在哪 |
|---|---|---|
mvn compile | 只编译代码 | target/classes/ |
mvn test | 编译+测试 | 测试报告在 target/surefire-reports/ |
mvn package | 编译+测试+打包 | target/ 下有 jar/war 包 |
mvn clean package | 先清空旧文件,再重新打包 | 干净的 target/ 下有新包 |
mvn install | 打包并放入本地仓库 | ~/.m2/repository/ 里多了一份 |
mvn deploy | 打包并上传远程仓库 | 公司私服上多了一份 |
发表回复