Skip to content

Maven 依赖管理机制

TIP

Maven 的依赖管理是项目的核心功能之一,理解依赖范围、传递依赖和冲突解决机制非常重要。

依赖范围(Scope)

Scope编译测试运行时示例
compile(默认)spring-core
test--junit
provided-servlet-api
runtime-mysql-connector
system-本地jar包

传递依赖

xml
<!-- A 依赖 B,B 依赖 C,则 A 自动依赖 C -->
<!-- A 的 pom.xml -->
<dependency>
    <groupId>com.example</groupId>
    <artifactId>B</artifactId>
    <version>1.0</version>
</dependency>
<!-- A 会自动获得 C 的依赖 -->

依赖冲突处理

最短路径优先

xml
<!-- A → B → C(1.0) 路径长度 2 -->
<!-- A → C(2.0)       路径长度 1 → 优先使用 C 2.0 -->

最先声明优先

路径长度相同时,先声明的依赖生效。

排除依赖

xml
<dependency>
    <groupId>com.example</groupId>
    <artifactId>some-lib</artifactId>
    <version>1.0</version>
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

查看依赖树

bash
mvn dependency:tree                         # 查看完整依赖树
mvn dependency:tree -Dincludes=org.slf4j    # 过滤查看指定依赖
mvn dependency:analyze                      # 分析依赖使用情况

WARNING

  • 避免引入相同功能的不同版本库(如同时使用 log4j 和 logback)
  • 定期检查并升级依赖版本,避免安全漏洞