文章目录
- 前言
-
- [📋 Maven 构建原理图解](#📋 Maven 构建原理图解)
- [🎯 为什么要下载这么多?](#🎯 为什么要下载这么多?)
-
- [1. 原因一:依赖关系](#1. 原因一:依赖关系)
- [2. 原因二:Maven 的传递依赖机制](#2. 原因二:Maven 的传递依赖机制)
- [3. 原因三:所有模块都要编译](#3. 原因三:所有模块都要编译)
- [📋 Maven install 的完整流程](#📋 Maven install 的完整流程)
- [🔍 下载依据?看你的 Maven 原理](#🔍 下载依据?看你的 Maven 原理)
- [📊 为什么这么多个模块都要构建?](#📊 为什么这么多个模块都要构建?)
- [💡 比喻理解](#💡 比喻理解)
- [🎯 总结](#🎯 总结)
前言
Maven install 的原理:
📋 Maven 构建原理图解
核心概念:依赖树
js
你的项目 (oa-xxx-system
│
├── 直接依赖(比如 yudao-dependencies
│ ├── spring-boot 2.7.18
│ ├── mybatis-plus 3.5.7
│ └── ...
│
└── 传递依赖
├── spring-boot 依赖 spring-core
├── mybatis-plus 依赖 mybatis
└── ...
🎯 为什么要下载这么多?
1. 原因一:依赖关系
**pom.xml 声明的依赖(显式声明的
xml
<!-- 只写了这几个
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 但 Spring Boot 自动依赖了几十个 jar 包
2. 原因二:Maven 的传递依赖机制
js
你只声明了 spring-boot-web
│
├── ↓
├─ 自动下载 spring-boot 本身
├─ 自动下载 spring-core
├─ 自动下载 spring-web
├─ 自动下载 spring-webmvc
├─ 自动下载 spring-boot-autoconfigure
├─ 自动下载 jackson(JSON)
├─ 自动下载 tomcat-embed-core(Web容器)
└── 自动下载 logback(日志)
3. 原因三:所有模块都要编译
图里的:
js
oa-xxx-system
├── yudao-dependencies (父模块)
├── yudao-framework
├── yudao-module-system
├── yudao-module-srm (你的模块)
└── ...
└── yudao-server
**每一个模块都需要:
- 下载自己依赖的 jar 包
- 编译自己的 Java 文件
- 打包成 jar
- 安装到本地仓库
📋 Maven install 的完整流程
| 步骤 | 做了什么 | 为什么下载 |
|---|---|---|
| 1️⃣ Resolve dependencies | 下载本项目依赖的所有 jar 包 | 从 settings.xml 配置的 Maven 镜像源下载 |
| 2️⃣ Compile | 编译本项目的 .java → .class | |
| 3️⃣ Package | 打包成 jar 文件 | |
| 4️⃣ Install | 安装到本地仓库(~/.m2/repository) | **供其他模块引用 |
🔍 下载依据?看你的 Maven 原理
从哪里下载?
根据你的 settings.xml(通常在 ~/.m2/settings.xml):
xml
<!-- 你的 Maven 镜像配置
<mirrors>
<mirror>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
然后 Maven 按照:
- 先看本地仓库(.m2/repository)有没有?
- 没有 → 去上面配置的 url 下载
- 下载回来 → 放入本地仓库
📊 为什么这么多个模块都要构建?
模块依赖关系:
yudao-server
↓
yudao-module-srm
↓
yudao-module-system
↓
yudao-framework
必须从下往上构建,因为上面的模块依赖下面的模块!
💡 比喻理解
就像:
**盖房子:
- 🏗️ 先打地基(yudao-framework)
- 🧱 再砌墙(yudao-module-system)
- 🪟 然后装修(yudao-module-srm)
- 🚪 最后安门(yudao-server)
每个步骤都得按顺序来,缺一不可!
🎯 总结
| 问题 | 答案 |
|---|---|
| 为什么要下载? | pom.xml 声明的依赖 + 传递依赖,本地没有的都要下载 |
| 从哪里下载? | settings.xml 配置的镜像源(阿里云、中央仓库) |
| 为什么这么多模块? | 模块之间有依赖,必须按顺序构建 |
| Install 后在哪? | `~/.m2/repository/ 或自定义路径 |
| 能不能不下载? | 第一次必须下载!第二次如果本地有就跳过 |
明白为什么 Maven install 要有这么多步骤了吧!😎