Maven基础精讲:第一篇(从概念到生命周期)
1、什么是 Maven?
Maven 主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。
Maven 项目对象模型(POM)可以通过一小段描述信息来管理项目的构建、报告和文档。
它包含了:
- 项目对象模型(POM)
- 一组标准集合
- 项目生命周期
- 依赖管理系统
- 插件执行机制
当使用 Maven 时,你用一个明确定义的 POM 描述项目,Maven 可以应用共享插件提供的逻辑来完成编译、打包、发布等工作。
2、Maven 能为我们解决什么问题?
-
统一管理第三方 Jar 包
以前我们要手动复制 jar 到WEB-INF/lib,每个项目一份,浪费空间。
Maven 用本地仓库集中管理,只要用坐标引用即可。 -
解决 Jar 包依赖关系
Jar 之间往往存在依赖,手动导入麻烦且易出错。
Maven 自动下载主依赖和其传递依赖。 -
自动获取第三方 Jar
不用手动去官网找,Maven 会从中央仓库下载,并处理依赖。 -
支持多模块项目
便于拆分大型项目,协同开发。
3、Maven 的优缺点
优点:
- 简化项目依赖管理
- 易于上手,常用命令简单
- 便于与 CI 工具(如 Jenkins)集成
- 便于项目升级和依赖升级
- 插件丰富,可扩展性强(自动发布版本、生成站点等)
缺点:
- 体系大,深入学习有一定门槛
- 出错时调试较复杂
- 网络环境差时,仓库下载速度慢、可能超时
4、Maven 的坐标
Maven 通过坐标唯一标识一个构件,包括:
groupId:组织或公司名artifactId:项目名version:版本号
这样其他项目就能用坐标依赖你的构件。
5、Maven 的生命周期
Maven 生命周期定义了从清理到部署整个构建过程。主要包括:
- clean:清理编译生成的文件
- validate:验证项目是否正确
- compile:编译源码
- test:执行测试
- package:打包(jar/war)
- verify:运行集成测试
- install:安装到本地仓库
- deploy:部署到远程仓库
6、常用 Maven 命令
mvn clean清理 targetmvn compile编译源码mvn test执行测试mvn package打包mvn install安装到本地仓库mvn deploy部署到远程仓库mvn dependency:tree分析依赖树,排查冲突
7、解决依赖传递的版本冲突
- 最短路径优先:依赖路径短的版本优先
- 申明顺序优先:同路径长度,先声明的优先
- 覆写原则:当前 POM 直接声明的依赖优先
8、依赖解析机制
system范围:直接从本地文件系统加载- 根据坐标从本地仓库查找,如果存在则使用
- 如果不存在,从远程仓库下载到本地后使用
- 对于
RELEASE、LATEST,合并本地和远程元数据,解析最新版本 - 对于
SNAPSHOT,根据更新策略获取最新快照
9、插件解析机制
插件也有自己的坐标,Maven 会先查本地仓库,没有再去插件远程仓库下载。
注意:插件和普通依赖的远程仓库是分开的,需要专门配置。
10、Maven 仓库分类(补充)
- 本地仓库:保存在本机
~/.m2/repository - 私服仓库:公司内网 Nexus/Artifactory,缓存依赖、发布内部包
- 中央仓库:Maven 官方仓库,默认下载来源
11、Maven 依赖范围(scope)(补充)
| Scope | 编译 | 测试 | 运行 | 说明 |
|---|---|---|---|---|
| compile | ✅ | ✅ | ✅ | 默认范围 |
| provided | ✅ | ✅ | ❌ | 运行时由容器提供 |
| runtime | ❌ | ✅ | ✅ | 只运行时需要 |
| test | ❌ | ✅ | ❌ | 仅测试 |
| system | ✅ | ✅ | ❌ | 路径写死,不推荐 |
| import | - | - | - | 导入依赖管理用 |
12、常用插件(补充)
maven-compiler-plugin:控制 Java 版本maven-surefire-plugin:执行单元测试maven-jar-plugin:打 jar 包maven-war-plugin:打 war 包maven-dependency-plugin:分析依赖、复制依赖maven-site-plugin:生成站点文档
13、多模块项目结构(补充)
父工程:
<packaging>pom</packaging>
<modules>
<module>module-a</module>
<module>module-b</module>
</modules>

被折叠的 条评论
为什么被折叠?



