什么是 Maven ?
Maven 是一个项目管理工具, 通过 pom.xml 文件的配置, 来获取 jar 包 (而不用手动下载, 添加 jar 包)
官方一点的说法: Maven 是一个项目管理工具, 基于 POM (Project Object Medel 项目对象模型) 的概念, Maven 可以通过一小段描述信息来管理项目的创建, 报告, 文档.
Maven 的功能
- 项目构建 – Maven 命令 : 编译, 测试, 打包, 发布 …
- 管理依赖 – 通过 pom.xml 管理 依赖 (jar 包) 的添加
2.1 依赖坐标 : (GroupId, ArtifactId, Version), 三者描述该依赖所在中央仓库的位置
2.2 依赖传递 : 父依赖可能依托子依赖实现, 于是引入父依赖时, 必须先引入子依赖 (Maven 可以帮我们自动引入子依赖)
2.3 依赖排除 : 有些依赖中的有些内容是不能够存在的 (Maven 能够帮助我们自动排除)
Maven 仓库
在 Maven 中, 通过 GroupId, ArtifactId, Version 的配置, 来唯一识别一个 jar 包
Maven 仓库则用于存储 jar 包
在 pom 文件中配置完依赖后, 点击刷新, Maven 会根据坐标的位置, 去仓库寻找 jar 包, 并下载添加到项目中供用户使用
jar 包获取流程
有点类似 JVM 的双亲委派模型
无私服/代理仓库
当项目中引入对应依赖 jar 包后, 首先会查找本地仓库中是否有对应 jar 包
- 如果有, 则在项目中直接引用
- 如果没有, 则去中央仓库中下载 jar 包到本地仓库, 项目仍引用 本地仓库 的 jar 包
有私服/代理仓库
当项目中引入对应依赖 jar 包后, 首先会查找本地仓库中是否有对应 jar 包
- 如果有, 则在项目中直接引用
- 如果没有, 则去 私服/代理仓库查找,
– 如果有, 则将资源缓存到本地仓库, 项目使用本地仓库的 jar 包
– 如果没有, 则去中央仓库中下载 jar 包, 缓存到 私服/代理服务器, 再缓存到本地仓库, 项目仍引用 本地仓库 的 jar 包