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

相关推荐
想带你从多云到转晴1 小时前
06、数据结构与算法---二叉树
java·数据结构·算法
likerhood1 小时前
设计模式:原型模式(Prototype Pattern)java版本
java·设计模式·原型模式
wuxuanok1 小时前
Maven 编译报错:java.lang.NoSuchFieldError: JCImport 问题总结
java·开发语言·maven
薛定谔的猫19821 小时前
gradio学习代码部分
java·前端·javascript
Devin~Y1 小时前
大厂Java面试实战:Spring Boot + Redis + Kafka + Kubernetes + RAG 的三轮追问(附答案解析)
java·spring boot·redis·spring cloud·kafka·kubernetes·resilience4j
weixin_ab1 小时前
【使用 curl 快速验证 Maven 依赖是否存在 —— 以 Spring AI OpenAI Starter 为例】
spring·maven
酉鬼女又兒1 小时前
Leetcode 26.删除有序数组中的重复项 双指针巧解有序数组去重:从快慢指针到原地修改算法的精髓
java·数据结构·算法·leetcode·职场和发展·蓝桥杯·排序算法
ch.ju1 小时前
Java程序设计(第3版)第二章——循环结构4
java
knight_9___2 小时前
RAG面试篇11
java·面试·职场和发展·agent·rag·智能体