Maven 依赖机制

Maven 依赖机制完全解析(2025 最新版)

一句话总结
Maven 依赖机制 = 自动下载 + 传递性解析 + 范围控制 + 冲突调解
通过一行 <dependency>,Maven 自动处理所有 JAR 包及其间接依赖

Maven Central 仓库:全球最大 Java 开源仓库,超 1000 万组件,每天下载量亿级!


一、依赖机制核心流程(4 步自动完成)

graph LR
    A[1. 声明依赖<br/>pom.xml] --> B[2. 解析 GAV 坐标<br/>groupId:artifactId:version]
    B --> C[3. 下载到本地仓库<br/>(~/.m2/repository)]
    C --> D[4. 传递解析<br/>自动拉取间接依赖]
    D --> E[5. 范围过滤<br/>compile/test/provided]
    E --> F[6. 冲突调解<br/>最近路径优先]

示例:只需声明 Spring Web,Maven 自动拉取 100+ JAR(Tomcat、Jackson 等)!


二、依赖范围(Scope)详解

Scope传递性编译测试运行典型示例
compile默认:spring-boot-starter-web
testJUnit
providedservlet-api(Tomcat 提供)
runtimeMySQL Driver
system本地 JAR(不推荐

规则子依赖继承父范围,但不能更宽!

<!-- 示例:provided 传递 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>  <!-- Tomcat 提供,不打包 -->
</dependency>

三、依赖传递(Transitive Dependencies)

场景:A → B → C

  • A 声明 B → Maven 自动 拉取 C
<!-- A 的 pom.xml 只需这一行 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.1.14</version>
</dependency>
<!-- Maven 自动添加:spring-core, spring-beans 等 50+ JAR! -->

查看传递树

mvn dependency:tree

输出示例:

[INFO] +- org.springframework:spring-context:jar:6.1.14:compile
[INFO] |  +- org.springframework:spring-aop:jar:6.1.14:compile  ← 传递依赖
[INFO] |  \- org.springframework:spring-beans:jar:6.1.14:compile

四、依赖冲突解决(4 大原则 + 3 种方法)

Maven 默认调解(自动)

原则优先级示例
1. 路径最近者优先最高A→B→C(1.0)
A→D→C(2.0) → 选 2.0
2. 声明顺序优先次之先声明 C(1.0) → 后声明 C(2.0) → 选 1.0
3. 版本号越大越新最后相同路径 → 选最高版本

手动解决(推荐)

方法命令/配置场景
1. 排除(exclusions)<exclusions>强制移除冲突 JAR
2. 版本锁定<dependency> 声明覆盖传递版本
3. dependencyManagement父 POM 统一版本多模块神器

实战示例

<!-- 1. 排除冲突 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.1.2</version>
    <exclusions>
        <exclusion>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 2. 版本锁定:强制用 18.0 -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

<!-- 3. 查看冲突 -->
mvn dependency:tree -Dverbose

五、dependencyManagement vs dependencies

区别dependencyManagementdependencies
作用统一版本(不下载)实际依赖(下载 + 使用)
继承子模块 自动继承版本子模块 不自动添加
场景父 POM 多模块普通项目
<!-- 父 POM -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>3.3.5</version>  <!-- 子模块无需写版本! -->
        </dependency>
    </dependencies>
</dependencyManagement>

<!-- 子模块 -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <!-- 版本自动从父继承! -->
    </dependency>
</dependencies>

六、仓库机制(下载源)

仓库路径说明
本地~/.m2/repository/首选,缓存所有 JAR
中央https://repo.maven.apache.org/默认远程
镜像阿里云https://maven.aliyun.com/10x 加速

配置阿里云settings.xml):

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

七、常用命令速查

命令作用
mvn dependency:tree查看依赖树
mvn dependency:tree -Dverbose显示冲突
mvn dependency:analyze未使用依赖
mvn dependency:resolve预解析依赖

八、最佳实践(避免 90% 问题)

  1. 统一版本<properties> 管理所有版本号
  2. 父 POMdependencyManagement 锁定
  3. 瘦 POM:只声明直接依赖
  4. 定期清理mvn versions:dependency-updates-report
  5. IDEA 插件Maven Helper 一键排除冲突

九、完整示例 POM

<properties>
    <spring.version>6.1.14</spring.version>
    <guava.version>33.3.0-jre</guava.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>

运行mvn clean package自动下载 200+ JAR


恭喜!你已掌握 Maven 依赖机制!

常见问题

  • 冲突mvn dependency:tree + 排除
  • 下载慢?阿里云镜像
  • 版本错?锁定 + properties

下一步推荐

方向内容
Spring Boot 依赖Starter 自动管理
多模块依赖父子继承实战
Nexus 私有仓库企业部署

需要 Spring Boot 依赖示例?回复 Spring Boot 依赖 立即获取! 🚀

文章已创建 2481

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部