news 2026/6/13 23:11:53

Maven 依赖范围

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Maven 依赖范围

Maven 依赖范围

在 Maven 中,依赖范围(Scope)主要用于控制依赖在不同构建阶段(编译、测试、运行)和类路径中的可用性,以及是否参与最终的打包。

Maven 提供了 6 种依赖范围,以下是它们的核心特性、作用矩阵及典型应用场景:

1. compile(默认范围)

  • 特性:全生命周期依赖。如果未显式指定<scope>,Maven 默认使用该范围。
  • 作用阶段:对主代码编译、测试代码编译、项目运行均有效。
  • 打包:✅ 会包含在最终构建产物中。
  • 典型场景:项目中全程需要的核心依赖,如spring-corelog4j等。

2. test(测试专属)

  • 特性:仅在测试编译和测试执行阶段有效。在主代码中无法 import 此类依赖的类,否则会报错。
  • 作用阶段:❌ 主代码编译无效;✅ 测试代码编译/执行有效;❌ 运行时无效。
  • 打包:❌ 不会包含在最终产物中。
  • 典型场景:单元测试或集成测试框架,如JUnitMockito

3. provided(运行时由容器提供)

  • 特性:编译和测试阶段需要该依赖,但运行时由 JDK 或 Web 容器(如 Tomcat)提供。
  • 作用阶段:✅ 主代码编译有效;✅ 测试有效;❌ 运行时不生效。
  • 打包:❌ 不会包含在构建产物中,避免与容器自带的包产生冲突。
  • 典型场景servlet-apilombok

4. runtime(运行时必需)

  • 特性:编译主代码时不需要(通常只需要接口),但在执行测试或运行项目时需要具体的实现类。
  • 作用阶段:❌ 主代码编译无效;✅ 测试有效;✅ 运行时有效。
  • 打包:✅ 会包含在构建产物中。
  • 典型场景:JDBC 驱动实现(如mysql-connector-java),因为编译时只需 JDK 提供的 JDBC 接口,运行时才需要具体的数据库驱动。

5. system(系统级本地依赖)

  • 特性:与provided类似,但不会从 Maven 仓库获取,而是从本地系统文件中获取。必须配合<systemPath>显式指定 JAR 包的绝对路径。
  • 注意:实际开发中应谨慎使用,因为它破坏了项目的可移植性。如果必须使用且需要打入可执行 JAR 包,还需在 Spring Boot 等打包插件中配置<includeSystemScope>true</includeSystemScope>
  • 典型场景:引入本地私有 SDK 或未发布到 Maven 中央仓库的旧版第三方 JAR 包。

6. import(依赖管理导入)

  • 特性:它不会对三种 classpath 产生实际的物理影响,而是专门用于<dependencyManagement>标签内。
  • 用法:必须同时结合<type>pom</type>使用,用于将另一个 POM 文件中的dependencyManagement配置导入到当前项目中,常用于统一版本控制(BOM)。

📊 核心依赖范围速查矩阵

依赖范围 (Scope)主代码编译测试代码运行/打包典型举例
compile(默认)✅ (打包)spring-core
test❌ (不打包)junit
provided❌ (不打包)servlet-api
runtime✅ (打包)jdbc驱动
system❌ (不打包)本地外部JAR包

你之前提到的那个spring_web冲突报错,其实和依赖范围配置不当也有直接关系。需要我帮你整理一份排查步骤吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 23:08:53

Windows Defender终极移除指南:完整教程与系统性能提升方案

Windows Defender终极移除指南&#xff1a;完整教程与系统性能提升方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华
网站建设 2026/6/13 23:04:52

T5-Base终极指南:一站式解决你的所有文本处理需求 [特殊字符]

T5-Base终极指南&#xff1a;一站式解决你的所有文本处理需求 &#x1f680; 【免费下载链接】t5-base 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/t5-base 还在为不同的NLP任务寻找不同的模型而烦恼吗&#xff1f;T5-Base来了&#xff01;这个强大的文本…

作者头像 李华
网站建设 2026/6/13 22:58:56

Pintr:让照片秒变艺术线条画的神奇工具,本地处理保护隐私

Pintr&#xff1a;让照片秒变艺术线条画的神奇工具&#xff0c;本地处理保护隐私 【免费下载链接】pintr Create single line illustrations from your pictures. 项目地址: https://gitcode.com/gh_mirrors/pi/pintr 想要将普通照片瞬间变成艺术感十足的线条画吗&#…

作者头像 李华
网站建设 2026/6/13 22:58:54

Ubuntu 20.04下,用AMD RX 6700XT跑PyTorch,我踩过的那些坑和最终解决方案

Ubuntu 20.04下AMD RX 6700XT深度学习环境配置实战指南 去年夏天&#xff0c;当我第一次尝试在Ubuntu 20.04系统上用AMD RX 6700XT搭建PyTorch开发环境时&#xff0c;原本以为两小时就能搞定的事情&#xff0c;最终花了我整整三天时间。这段经历让我深刻体会到&#xff0c;在Li…

作者头像 李华
网站建设 2026/6/13 22:58:01

嵌入式系统安全基石:看门狗与CRC校验的原理、配置与实战

1. 嵌入式安全机制的核心&#xff1a;为什么我们需要看门狗与CRC&#xff1f;在嵌入式系统的世界里&#xff0c;尤其是工业控制、汽车电子或者医疗设备这些领域&#xff0c;系统一旦“死机”或数据出错&#xff0c;后果往往不是重启一下那么简单。想象一下&#xff0c;一个控制…

作者头像 李华