Maven 完全指南 - 新手必读
Maven项目构建与依赖管理工具
Maven 完全指南 - 新手必读
文档版本:v1.0
更新日期:2025-11-15
适合人群:Java 开发新手
📋 目录
🎯 什么是 Maven
简单理解
Maven 是什么?
- Maven 是一个 Java 项目管理工具
- 帮你管理项目依赖(jar 包)
- 帮你编译、测试、打包项目
- 统一项目结构
类比生活场景:
想象你要做一道菜:
- 食材管理 → Maven 依赖管理(自动下载需要的 jar 包)
- 烹饪步骤 → Maven 生命周期(编译→测试→打包)
- 菜谱标准 → Maven 项目结构(统一的目录规范)
📚 Maven 核心概念
1. Maven 仓库
本地仓库(Local Repository)
- 位置:
C:\Users\你的用户名\.m2\repository - 作用:存储下载的 jar 包
- 类比:你家的冰箱(存储食材)
中央仓库(Central Repository)
- 位置:https://repo.maven.apache.org/maven2/
- 作用:Maven 官方的 jar 包仓库
- 类比:超市(购买食材的地方)
私服/镜像仓库
- 位置:公司内部或阿里云镜像
- 作用:加速下载,提供内部 jar 包
- 类比:社区超市(离家更近)
2. Maven 坐标(GAV)
每个 jar 包都有唯一的坐标:
<dependency>
<groupId>org.springframework.boot</groupId> <!-- 组织/公司 -->
<artifactId>spring-boot-starter-web</artifactId> <!-- 项目名称 -->
<version>2.7.0</version> <!-- 版本号 -->
</dependency>
类比: 就像快递地址
groupId:省份/城市(com.alibaba、org.springframework)artifactId:小区名称(druid、mybatis-plus)version:门牌号(1.0.0、2.5.3)
3. pom.xml 文件
POM = Project Object Model(项目对象模型)
这是 Maven 项目的核心配置文件,类比为项目的”身份证”。
典型的 pom.xml 结构:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- 1️⃣ 项目基本信息 -->
<groupId>com.credat.ddcc</groupId>
<artifactId>ddcc-cloud</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging> <!-- 打包方式:pom/jar/war -->
<!-- 2️⃣ 属性配置 -->
<properties>
<java.version>11</java.version>
<spring.boot.version>2.7.0</spring.boot.version>
</properties>
<!-- 3️⃣ 依赖管理 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 4️⃣ 构建配置 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4. Maven 生命周期
Maven 有三个独立的生命周期:
🔵 Clean 生命周期(清理)
pre-clean → clean → post-clean
- 作用: 清理编译产生的文件
🟢 Default 生命周期(构建)
validate → compile → test → package → install → deploy
- 作用: 完成项目的构建和发布
🟡 Site 生命周期(站点)
pre-site → site → post-site → site-deploy
- 作用: 生成项目文档和站点
🔧 Maven 常用命令详解
1. mvn compile(编译)
作用: 编译项目源代码
详细说明:
mvn compile
做了什么:
- 检查
src/main/java目录下的 Java 源文件 - 将
.java文件编译成.class字节码文件 - 输出到
target/classes目录
类比: 把你写的中文菜谱(Java 代码)翻译成厨师能看懂的专业术语(字节码)
使用场景:
- ✅ 想快速检查代码是否有语法错误
- ✅ 修改代码后,想验证能否正常编译
- ❌ 不适合最终打包部署
输出结果:
[INFO] Compiling 150 source files to D:\workProgram\ddcc-cloud\target\classes
[INFO] BUILD SUCCESS
2. mvn clean(清理)
作用: 删除之前编译生成的所有文件
详细说明:
mvn clean
做了什么:
- 删除整个
target目录 - 清理编译产生的
.class文件 - 清理打包产生的
.jar或.war文件
类比: 打扫厨房,把上次做菜的残留物都清理掉
使用场景:
- ✅ 编译出现奇怪问题(清理后重新编译)
- ✅ 切换分支或版本前
- ✅ 打包部署前(确保是最新的)
- ✅ 项目占用空间太大时
重要提示:
- ⚠️ clean 会删除
target目录,但不会删除源代码 - ⚠️ clean 不会删除本地仓库的 jar 包
实际效果:
执行前:target 文件夹存在(200MB)
执行后:target 文件夹被删除
3. mvn install(安装)
作用: 打包项目并安装到本地仓库
详细说明:
mvn install
完整流程(自动执行):
1. clean(清理)
↓
2. compile(编译源代码)
↓
3. test(运行测试)
↓
4. package(打包成 jar/war)
↓
5. install(安装到本地仓库)
做了什么:
- 执行完整的构建流程
- 将项目打包成
.jar或.war文件 - 把打包文件复制到本地 Maven 仓库(
~/.m2/repository) - 其他项目可以引用这个 jar 包
类比: 做好一道菜,装盘,然后放进冰箱(本地仓库)保存,下次可以直接用
使用场景:
- ✅ 多模块项目中,A 模块被 B 模块依赖
- ✅ 本地开发公共组件,需要给其他项目使用
- ✅ 发布新版本前的测试
实际例子:
假设你的项目结构:
ddcc-cloud
├── ddcc-common ← 公共模块
├── ddcc-system ← 业务模块(依赖 ddcc-common)
└── pom.xml
操作步骤:
# 1. 先安装公共模块到本地仓库
cd ddcc-common
mvn install
# 2. 再编译业务模块(会从本地仓库找 ddcc-common)
cd ../ddcc-system
mvn compile
输出结果:
[INFO] Installing D:\workProgram\ddcc-cloud\ddcc-common\target\ddcc-common-1.0.0.jar
to C:\Users\你的用户名\.m2\repository\com\credat\ddcc\ddcc-common\1.0.0\ddcc-common-1.0.0.jar
[INFO] BUILD SUCCESS
4. mvn clean install(组合命令)
作用: 先清理,再完整构建并安装
详细说明:
mvn clean install
等同于:
mvn clean # 第1步:清理
mvn install # 第2步:完整构建并安装
使用场景:
- ✅ 最常用的命令!
- ✅ 修改代码后重新构建
- ✅ 切换分支后重新编译
- ✅ 解决依赖问题
为什么要加 clean?
| 场景 | 不加 clean | 加 clean |
|---|---|---|
| 删除了某个类 | 旧的 .class 文件还在 | ✅ 彻底清除 |
| 修改了配置文件 | 可能用旧的配置 | ✅ 使用最新配置 |
| 切换了分支 | 可能混合新旧代码 | ✅ 干净的构建 |
常用参数:
# 跳过测试(加快速度)
mvn clean install -DskipTests
# 跳过测试编译和执行
mvn clean install -Dmaven.test.skip=true
# 指定配置文件
mvn clean install -P dev
5. mvn package(打包)
作用: 打包项目但不安装到本地仓库
详细说明:
mvn package
执行流程:
compile → test → package
做了什么:
- 编译源代码
- 运行测试
- 打包成
.jar或.war文件 - 输出到
target目录 - ❌ 不会安装到本地仓库
与 install 的区别:
| 命令 | 打包 | 安装到本地仓库 | 使用场景 |
|---|---|---|---|
mvn package | ✅ | ❌ | 单纯打包部署 |
mvn install | ✅ | ✅ | 需要被其他项目依赖 |
使用场景:
- ✅ 打包部署到服务器
- ✅ 单体应用打包
- ✅ 不需要被其他项目引用
6. mvn test(测试)
作用: 运行单元测试
详细说明:
mvn test
做了什么:
- 编译
src/test/java下的测试代码 - 运行所有测试类(以
Test结尾的类) - 生成测试报告
使用场景:
- ✅ 验证代码是否正确
- ✅ 持续集成(CI)
- ✅ 回归测试
7. mvn dependency:tree(查看依赖树)
作用: 查看项目的依赖关系
详细说明:
mvn dependency:tree
输出示例:
[INFO] com.credat.ddcc:ddcc-system:jar:1.0.0
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.7.0
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.7.0
[INFO] | | +- org.springframework.boot:spring-boot:jar:2.7.0
[INFO] | | +- org.springframework:spring-core:jar:5.3.20
[INFO] | | \- org.yaml:snakeyaml:jar:1.30
[INFO] | +- org.springframework:spring-web:jar:5.3.20
[INFO] | \- org.springframework:spring-webmvc:jar:5.3.20
使用场景:
- ✅ 排查依赖冲突
- ✅ 查看传递依赖
- ✅ 了解项目依赖关系
💻 IDEA 中的 Maven 操作
1. Reload All Maven Projects(刷新所有 Maven 项目)
在哪里找:
- 方式1:IDEA 右侧 Maven 面板 → 点击刷新图标 🔄
- 方式2:右键项目 → Maven → Reload Project
作用:
- 重新读取
pom.xml文件 - 下载新添加的依赖
- 更新项目配置
- 刷新依赖树
什么时候用:
- ✅ 修改了
pom.xml文件 - ✅ 添加了新的依赖
- ✅ 修改了 Maven 版本
- ✅ 依赖下载失败后重试
- ✅ 切换了 Maven 配置文件
类比: 你修改了购物清单,告诉系统重新检查并下载新商品
实际例子:
<!-- 1. 在 pom.xml 中添加新依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<!-- 2. 点击 IDEA 右侧 Maven 面板的刷新按钮 -->
<!-- 3. IDEA 会自动下载 druid-1.2.8.jar -->
2. Maven 面板常用操作
打开 Maven 面板:
- View → Tool Windows → Maven
- 或点击右侧的 “Maven” 标签
面板功能:
Maven 面板
├── 🔄 Reload All Maven Projects (刷新)
├── ⬇️ Download Sources/Documentation (下载源码)
├── 🔍 Show Dependencies (查看依赖)
├── Lifecycle(生命周期)
│ ├── clean (清理)
│ ├── validate (验证)
│ ├── compile (编译)
│ ├── test (测试)
│ ├── package (打包)
│ ├── verify (验证)
│ └── install (安装)
└── Plugins(插件)
└── 各种 Maven 插件命令
3. IDEA 中执行 Maven 命令
方式1:使用 Maven 面板
- 打开右侧 Maven 面板
- 展开 Lifecycle
- 双击要执行的命令(如
clean、install)
方式2:使用命令行
- 点击 IDEA 底部 “Terminal” 标签
- 输入 Maven 命令:
mvn clean install
方式3:使用 Run Configuration
- Run → Edit Configurations
- 点击 + 号 → Maven
- 配置命令:
clean install -DskipTests - 点击运行
🎯 实战经验
场景1:修改代码后重新运行
问题: 修改了 Java 代码,但运行时还是旧的效果
解决方案:
# 方案1:重新编译(快速)
mvn compile
# 方案2:清理后重新编译(彻底)
mvn clean compile
# 方案3:在 IDEA 中
# Build → Rebuild Project
场景2:添加新依赖后无法使用
问题: 在 pom.xml 中添加了新依赖,但代码中无法导入
解决方案:
# 步骤1:刷新 Maven 项目
IDEA 右侧 Maven 面板 → 点击刷新图标 🔄
# 步骤2:如果还不行,重新导入
File → Invalidate Caches / Restart → Invalidate and Restart
# 步骤3:如果依赖下载失败,手动安装
mvn clean install -U
# -U 参数:强制更新依赖
场景3:多模块项目构建
项目结构:
ddcc-cloud(父项目)
├── ddcc-common ← 公共模块
├── ddcc-system ← 系统模块(依赖 ddcc-common)
├── ddcc-gateway ← 网关模块
└── pom.xml
构建顺序:
# 方式1:在父项目根目录执行(推荐)
cd ddcc-cloud
mvn clean install
# Maven 会自动按依赖顺序构建:
# 1. ddcc-common
# 2. ddcc-system
# 3. ddcc-gateway
# 方式2:单独构建某个模块
cd ddcc-system
mvn clean install
场景4:依赖冲突排查
问题: 项目中有多个版本的同一个 jar 包
排查步骤:
# 1. 查看依赖树
mvn dependency:tree
# 2. 查找特定依赖
mvn dependency:tree -Dincludes=org.springframework:spring-core
# 3. 分析冲突
mvn dependency:tree -Dverbose
解决方案:
<!-- 在 pom.xml 中排除冲突的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
场景5:加速 Maven 构建
方法1:跳过测试
# 跳过测试执行
mvn clean install -DskipTests
# 跳过测试编译和执行
mvn clean install -Dmaven.test.skip=true
方法2:使用本地缓存
# 离线模式(使用本地仓库)
mvn clean install -o
方法3:并行构建
# 使用 4 个线程并行构建
mvn clean install -T 4
# 或者自动检测 CPU 核心数
mvn clean install -T 1C
方法4:配置阿里云镜像
编辑 ~/.m2/settings.xml:
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
📊 经验总结
Maven 命令速查表
| 命令 | 作用 | 耗时 | 使用频率 |
|---|---|---|---|
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn compile | 编译源代码 | ⚡ 快 | ⭐⭐⭐ |
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn clean | 清理构建目录 | ⚡ 快 | ⭐⭐⭐⭐⭐ |
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn test | 运行测试 | ⏱️ 中 | ⭐⭐ |
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn package | 打包项目 | ⏱️ 中 | ⭐⭐⭐⭐ |
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn install | 安装到本地仓库 | 🐌 慢 | ⭐⭐⭐⭐⭐ |
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn clean install | 清理并安装 | 🐌 慢 | ⭐⭐⭐⭐⭐ |
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn dependency:tree | 查看依赖树 | ⚡ 快 | ⭐⭐⭐ |
最佳实践
✅ DO(应该做)
-
修改代码后先 clean
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn clean install -
多模块项目在根目录构建
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)cd ddcc-cloud mvn clean install -
开发时跳过测试加快速度
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn clean install -DskipTests -
配置阿里云镜像加速下载
-
定期清理本地仓库
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 删除所有 SNAPSHOT 版本 mvn dependency:purge-local-repository
❌ DON’T(不应该做)
-
不要手动修改 target 目录
- target 是自动生成的,手动修改会被覆盖
-
不要直接删除本地仓库
- 除非确实需要,否则不要删除
~/.m2/repository
- 除非确实需要,否则不要删除
-
不要在生产环境使用 SNAPSHOT 版本
- SNAPSHOT 版本不稳定,可能随时变化
-
不要提交 target 目录到 Git
- 在
.gitignore中添加:target/
- 在
常用组合命令
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 1. 完整构建(最常用) mvn clean install # 2. 快速构建(跳过测试) mvn clean install -DskipTests # 3. 只编译不打包 mvn clean compile # 4. 打包但不安装到本地仓库 mvn clean package # 5. 强制更新依赖 mvn clean install -U # 6. 离线构建 mvn clean install -o # 7. 并行构建(多模块项目) mvn clean install -T 4 [](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#) # 8. 指定配置文件 mvn clean install -P dev # 9. 详细输出 mvn clean install -X # 10. 安静模式 mvn clean install -q
❓ 常见问题
Q1: mvn compile 和 IDEA 的 Build 有什么区别?
A:
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn compile:使用 Maven 编译,遵循 Maven 生命周期IDEA Build:使用 IDEA 内置编译器,速度更快
建议:
- 日常开发用 IDEA Build(快)
- 打包部署用 mvn compile(标准)
Q2: 为什么 mvn install 这么慢?
A: 因为 install 会执行完整流程:
clean → compile → test → package → install
解决方案:
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 跳过测试 mvn install -DskipTests # 或者只执行需要的步骤 mvn compile # 只编译 [](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)
Q3: target 目录可以删除吗?
A:
- ✅ 可以删除,这是自动生成的
- 执行
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn clean就是删除 target 目录 - 下次编译会重新生成
Q4: 依赖下载失败怎么办?
A:
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 1. 检查网络连接 # 2. 配置阿里云镜像(见上面的配置) # 3. 强制更新 mvn clean install -U # 4. 删除失败的依赖重新下载 # 删除 ~/.m2/repository 中对应的目录 # 重新执行 mvn install
Q5: IDEA 中看不到 Maven 面板?
A:
View → Tool Windows → Maven
或者点击 IDEA 左侧/右侧边栏的 “Maven” 标签。
Q6: 多模块项目构建顺序是怎样的?
A: Maven 会自动按依赖关系排序:
父项目 pom.xml 中定义模块顺序: <modules> <module>ddcc-common</module> ← 被依赖的先构建 <module>ddcc-system</module> ← 依赖 ddcc-common 后构建 </modules> 实际构建顺序: 1. ddcc-common(没有依赖其他模块) 2. ddcc-system(依赖 ddcc-common)
Q7: 如何查看 Maven 版本?
A:
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn -version # 输出: Apache Maven 3.8.1 Maven home: D:\apache-maven-3.8.1 Java version: 11.0.12
Q8: 本地仓库在哪里?
A:
- Windows:
C:\Users\你的用户名\.m2\repository - Mac/Linux:
~/.m2/repository
📚 信息参考
官方文档
- Maven 官网:https://maven.apache.org/
- Maven 中央仓库:https://search.maven.org/
推荐阅读
- 《Maven 实战》 - 许晓斌
- 《Maven 权威指南》
在线工具
- Maven 依赖搜索:https://mvnrepository.com/
- POM 生成器:https://maven.apache.org/pom.html
🎓 学习路径建议
第1天:基础概念
- 理解什么是 Maven
- 了解 Maven 仓库
- 学习 pom.xml 基本结构
第2天:常用命令
- 掌握 compile、clean、install
- 学会在 IDEA 中使用 Maven
- 练习添加依赖
第3天:实战练习
- 创建多模块项目
- 练习依赖管理
- 解决依赖冲突
第4天:进阶技巧
- 学习 Maven 生命周期
- 使用 Maven 插件
- 配置镜像加速
📞 需要帮助?
如果还有问题,可以:
- 查看 Maven 官方文档
- 搜索 Stack Overflow
- 查看项目中的
pom.xml示例
Happy Coding! 🚀
附录:你的项目实战
针对 ddcc-cloud 项目
当前项目结构:
ddcc-cloud ├── ddcc-dependencies ← 依赖管理 ├── ddcc-framework ← 框架模块 ├── ddcc-gateway ← 网关 ├── ddcc-module-system ← 系统模块 └── pom.xml ← 父 POM
推荐操作流程:
1️⃣ 首次启动项目
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 在项目根目录 cd D:\workProgram\ddcc-cloud # 完整构建所有模块 mvn clean install -DskipTests # 等待构建完成(第一次会下载很多依赖,需要10-20分钟)
2️⃣ 日常开发
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 修改代码后 mvn clean compile # 或在 IDEA 中 # Build → Rebuild Project
3️⃣ 修改了 AdminUserDO.java 后
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 在 ddcc-module-system 目录 cd ddcc-module-system\ddcc-module-system-biz mvn clean compile # 或在父目录重新构建整个 system 模块 cd ddcc-module-system mvn clean install -DskipTests
4️⃣ 添加新依赖后
[](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)# 1. 在 pom.xml 中添加依赖 # 2. 在 IDEA 中刷新 Maven # 右侧 Maven 面板 → 点击刷新图标 🔄 # 3. 重新编译 mvn clean compile
记住:遇到奇怪问题时,先试试 [](http://localhost:63342/markdownPreview/2033648994/markdown-preview-index-aptruhisuau7n0jmbmnr9b36c.html#)mvn clean install ! 💡
Related notes
- 所属 MOC: Java MOC
- 所属 MOC: Development Environment MOC