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)
- 定期检查并升级依赖版本,避免安全漏洞