Maven install 的原理

文章目录

  • 前言
    • [📋 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

**每一个模块都需要:

  1. 下载自己依赖的 jar 包
  2. 编译自己的 Java 文件
  3. 打包成 jar
  4. 安装到本地仓库

📋 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 按照:

  1. 先看本地仓库(.m2/repository)有没有?
  2. 没有 → 去上面配置的 url 下载
  3. 下载回来 → 放入本地仓库

📊 为什么这么多个模块都要构建?

模块依赖关系:

复制代码
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 要有这么多步骤了吧!😎

相关推荐
霸道流氓气质21 分钟前
Spring AI 技术细节:VectorStore 多库统一抽象
java·人工智能·spring
今天AI了吗22 分钟前
Codex 配置自定义 AI API 完整指南:从零到一接入你的专属模型
java·人工智能·python·数据分析·embedding
学长毕业设计42 分钟前
基于SpringBoot的健康食谱管理系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
珍珠先生43 分钟前
P10 · 缺 MySQL 驱动 jar:ClassNotFoundException: com.mysql.cj.jdbc.Driver
java
pnoker1 小时前
从工业软件到 AI 智能体:工业 AIoT 技术路线的系统梳理
java·人工智能·物联网·microsoft·开源·工业互联网
专注仿真1 小时前
Vapor框架构建及Swift for TensorFlow图像分析
java·其他
逃逸线LOF1 小时前
Spring的AOP简介
java·后端·spring
砚底藏山河1 小时前
【量化纯GET实战 #21】用 pandas 做分析:把接口数据变成 DataFrame
java·python·金融·maven·pandas
Zzzzmo_2 小时前
Spring MVC
java·spring·mvc·cookie/session
cfm_29142 小时前
Spring核心设计模式
java·spring·设计模式