全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 19 道配套习题

依赖管理基础专题

专题说明

本专题系统讲解 Maven 依赖管理的核心机制,涵盖依赖声明与坐标引用、六种依赖范围、传递性依赖解析路径、依赖排除策略与版本冲突的近路径优先原则,是 Maven 学习中最关键的专题之一。

学习目标

  1. 掌握依赖声明的坐标写法与版本范围语法
  2. 理解六种依赖范围(compile、provided、runtime、test、system、import)的区别
  3. 理解传递性依赖的解析机制与路径最短优先原则
  4. 熟练使用 exclusion 排除不需要的传递依赖
  5. 掌握依赖版本冲突的诊断与解决方法

学习内容

  • 依赖声明与坐标引用:dependency 元素、坐标三要素、版本范围
  • 依赖范围详解:compile/provided/runtime/test/system/import 六种范围
  • 传递性依赖机制:一级与二级依赖、依赖调解、路径最短优先
  • 依赖排除与排除策略:exclusion 语法、排除原则、可选依赖
  • 依赖版本冲突解决:mvn dependency:tree 诊断、版本仲裁、BOM 管理

学习建议

  1. 动手创建项目,观察不同 scope 下依赖的可见性差异
  2. 使用 mvn dependency:tree 命令查看依赖树是必学技能
  3. 版本冲突是日常开发最常见的问题,务必掌握排查方法
  4. 理解"路径最短优先"和"声明优先"两大调解原则

📝 配套习题(19 题)

💡 参考答案在文末
判断题
1

依赖的 scope 会影响其传递依赖的范围,例如 provided 范围的依赖不会传递其依赖。

A

B

2

Maven 项目的所有外部依赖都必须在 POM 文件的 dependencies 标签内声明。

A

B

3

在 pom.xml 的 dependencies 元素中,每个 dependency 必须声明 groupId、artifactId 和 version 三个坐标要素。

A

B

4

使用 dependencyManagement 可以统一管理传递依赖的版本,即使在不同子模块中声明也会被覆盖。

A

B

5

如果不指定依赖范围,则依赖默认为 compile 范围,会被包含在编译、测试和运行时的 classpath 中。

A

B

6

在使用 exclusions 排除依赖时,必须同时指定 groupId 和 artifactId 才能精确排除。

A

B

单选题
7

当存在多个版本的同一依赖时,Maven 默认使用哪个版本?

A

最新版本

B

最早声明的版本

C

依赖树中路径最短的版本

D

依赖树中路径最长的版本

8

项目 A 依赖 B,B 依赖 C。如果 A 未直接声明对 C 的依赖,会发生什么?

A

编译失败,找不到 C

B

C 会自动作为传递依赖被引入

C

需要手动在 A 中声明 C

D

只在测试时引入 C

9

在 POM 中使用 exclusions 排除传递依赖时,exclusions 标签应该放在哪里?

A

放在 dependencies 标签下

B

放在需要排除的 dependency 标签内

C

放在 dependencyManagement 标签下

D

放在 properties 标签下

10

以下哪种依赖范围的依赖在编译和测试时都需要,但在运行时不需要?

A

compile

B

provided

C

runtime

D

test

11

以下哪项不是 Maven 依赖坐标的必需元素?

A

groupId

B

artifactId

C

version

D

scope

12

使用 mvn dependency:tree 命令时,输出中被省略号 (...) 标记的依赖表示什么?

A

依赖下载失败

B

依赖被省略(已存在其他版本)

C

依赖正在下载中

D

依赖类型错误

多选题
13

以下哪些依赖范围的依赖会被包含在最终打包产物中(如 war 的 WEB-INF/lib)?

A

compile

B

provided

C

runtime

D

test

14

关于 Maven 的传递性依赖,以下说法正确的有哪些?

A

传递依赖的版本冲突需要手动解决

B

可以通过 mvn dependency:tree 查看传递依赖

C

传递依赖的 scope 可能会被修改

D

可以在 dependencyManagement 中统一管理传递依赖版本

15

以下哪些方法可以用于分析和解决依赖版本冲突?

A

使用 mvn dependency:tree 查看完整依赖树

B

使用 mvn enforcer:enforce 检查依赖冲突

C

在 dependencyManagement 中锁定版本

D

使用 exclusions 排除冲突版本后重新声明

填空题
16

JUnit 等测试框架的依赖范围应该设置为 ____________,因为这类依赖仅在 ____________ 阶段需要,不会被打包到生产产物中。

17

使用依赖排除的主要目的是避免 ________________________,确保项目使用正确版本的库。

18

Maven 解决版本冲突的两个主要策略是:____________(优先选择依赖树中路径最短的版本)和 ____________(路径相同时优先选择 POM 中先声明的版本)。

19

在 POM 中声明依赖时,____________ 标签内可以包含多个 ____________ 子标签,每个子标签代表一个外部依赖。

参考答案
1.正确 2.正确 3.错误 4.正确 5.正确 6.正确 7.C 8.B 9.B 10.B 11.D 12.B 13.A;C 14.A;B;C;D 15.A;C;D 16.test;测试 17.类路径污染;版本冲突 18.最短路径优先;声明优先 19.dependencies;dependency
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 企业级仓库管理专题
下一个专题 → 依赖高级特性
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码