在 Maven 中使用 <scope> 元素:全面指南
目录
前言
元素用于指定依赖项的作用范围,决定依赖项在哪些阶段(如编译、测试、运行等)可用。Maven 根据 的值来决定是否将依赖项包含在最终的构建结果中。
3. 使用步骤及代码示例
3.2 使用 import scope
4. 注意事项
4.2 避免滥用 system scope
4.3 依赖传递性
4.4 依赖冲突
4.5 测试依赖
4.6 构建优化
5. 常见问题及解决方案
5.1 依赖项未生效
5.2 依赖冲突
5.3 构建包过大
6. 总结
前言
在 Maven 中,<scope>
元素用于定义依赖项的作用范围,即依赖项在项目生命周期中的使用方式。正确使用 <scope>
可以帮助我们优化项目的构建过程,减少不必要的依赖冲突,并提高构建效率。本文将详细介绍 <scope>
的使用步骤、常见作用范围、代码示例以及注意事项。
1. <scope>
元素的作用
<scope>
元素用于指定依赖项的作用范围,决定依赖项在哪些阶段(如编译、测试、运行等)可用。Maven 根据 <scope>
的值来决定是否将依赖项包含在最终的构建结果中。
2. 常见的 <scope>
值
以下是 Maven 中常见的 <scope>
值及其含义:
Scope | 描述 |
---|---|
compile | 默认值。依赖项在编译、测试和运行时都可用,并会包含在最终的构建结果中。 |
provided | 依赖项在编译和测试时可用,但不会包含在最终的构建结果中。通常用于容器提供的依赖(如 Servlet API)。 |
runtime | 依赖项在测试和运行时可用,但在编译时不可用。通常用于运行时需要的依赖(如 JDBC 驱动)。 |
test | 依赖项仅在测试时可用,不会包含在最终的构建结果中。通常用于测试框架(如 JUnit)。 |
system | 类似于 provided ,但需要显式指定依赖项的路径。通常不推荐使用。 |
import | 仅用于 <dependencyManagement> 中,用于导入其他 POM 中的依赖管理配置。 |
3. 使用步骤及代码示例
3.1 在 pom.xml
中定义 <scope>
在 pom.xml
文件的 <dependencies>
部分,可以为每个依赖项指定 <scope>
。以下是一个示例:
<dependencies><!-- 默认 scope 是 compile --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.0</version></dependency><!-- 使用 provided scope --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- 使用 runtime scope --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version><scope>runtime</scope></dependency><!-- 使用 test scope --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
</dependencies>
3.2 使用 import
scope
import
scope 通常用于 <dependencyManagement>
中,用于导入其他 POM 文件中的依赖管理配置。以下是一个示例:
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
4. 注意事项
4.1 选择合适的 <scope>
- compile:适用于项目代码直接依赖的库。
- provided:适用于容器或环境提供的依赖,避免与最终构建包中的依赖冲突。
- runtime:适用于仅在运行时需要的依赖,如数据库驱动。
- test:适用于测试代码依赖的库,避免污染生产代码的依赖。
4.2 避免滥用 system
scope
system
scope 需要显式指定依赖项的路径,这会导致项目可移植性变差。建议尽量避免使用 system
scope,改用 provided
或 compile
。
4.3 依赖传递性
<scope>
会影响依赖的传递性。例如:
- 如果 A 依赖 B(
scope=compile
),B 依赖 C(scope=test
),则 A 不会传递依赖 C。 - 如果 A 依赖 B(
scope=compile
),B 依赖 C(scope=runtime
),则 A 会传递依赖 C,但scope
为runtime
。
4.4 依赖冲突
当多个依赖项引入相同的传递依赖时,可能会出现版本冲突。可以通过 <dependencyManagement>
或 <exclusions>
来解决冲突。
4.5 测试依赖
确保测试依赖(如 JUnit)的 <scope>
设置为 test
,以避免将测试框架包含在最终的构建结果中。
4.6 构建优化
合理使用 <scope>
可以减少构建包的大小,提高构建效率。例如:
- 使用
provided
避免将容器提供的依赖打包到 WAR 文件中。 - 使用
runtime
避免将运行时依赖包含在编译阶段。
5. 常见问题及解决方案
5.1 依赖项未生效
如果依赖项未生效,可能是 <scope>
设置不正确。例如:
- 如果依赖项的
<scope>
为test
,则只能在测试代码中使用。 - 如果依赖项的
<scope>
为runtime
,则不能在编译代码中使用。
5.2 依赖冲突
如果出现依赖冲突,可以使用 <dependencyManagement>
统一管理依赖版本,或者使用 <exclusions>
排除冲突的传递依赖。例如:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.0</version><exclusions><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions>
</dependency>
5.3 构建包过大
如果构建包过大,可以检查是否有不必要的依赖被包含。例如:
- 确保容器提供的依赖(如 Servlet API)的
<scope>
为provided
。 - 确保测试依赖的
<scope>
为test
。
6. 总结
<scope>
元素是 Maven 中非常重要的配置项,用于控制依赖项的作用范围。合理使用 <scope>
可以优化项目的构建过程,减少依赖冲突,并提高构建效率。本文详细介绍了 <scope>
的使用步骤、常见作用范围。 更多问题,可以参考 Maven 官方文档 或深入源码进行学习。
相关文章:
在 Maven 中使用 <scope> 元素:全面指南
目录 前言 在 Maven 中, 元素用于定义依赖项的作用范围,即依赖项在项目生命周期中的使用方式。正确使用 可以帮助我们优化项目的构建过程,减少不必要的依赖冲突,并提高构建效率。本文将详细介绍 的使用步骤、常见作用范围、代码…...
Manus邀请码如何申请,有哪些办法
Manus是由Monica团队推出的一款通用型AI智能体产品,旨在通过自主任务规划与执行能力,将用户的想法转化为实际成果。它不仅能够理解复杂指令,还能通过调用虚拟环境中的工具(如浏览器、代码编辑器、文件处理器等)&#x…...
大型WLAN组网部署(Large scale WLAN network deployment)
大型WLAN组网部署 大型WLAN网络关键技术 技术 作用 VLAN Pool 通过VLAN Pool把接入的用户分配到不同的VLAN,可以减少广播域,减少网络中的广播报文,提升网络性能。 DHCP Option 43 & 52 当AC和AP间是三层组网时,AP通过…...
MQ保证消息的顺序性
在消息队列(MQ)中保证消息的顺序性是一个常见的需求,尤其是在需要严格按顺序处理业务逻辑的场景(例如:订单创建 → 支付 → 发货)。 一、消息顺序性被破坏的原因 生产者异步/并行发送:消息可能…...
SQL Server查询计划操作符(7.3)——查询计划相关操作符(9)
7.3. 查询计划相关操作符 78)Repartition Streams:该操作符消费多个输入流并产生多个输出流。期间,记录内容与格式保持不变。如果查询优化器使用一个位图过滤(bitmap filter),则输出流中的数据行数将会减少。一个输入流的每行记录被放入一个输出流。如果该操作符保留顺序…...
杨校老师课堂之零基础入门C++备战信息学奥赛-基础篇
零基础快速入门C C学习路线一、基础语法1. C基础框架2. C语言输出3. C 语言输入4. C 数据类型5. C 赋值6. 运算符与表达式7. 控制结构语句7.1 if分支结构语句7.1.1 单分支结构语句7.1.2 双分支结构语句7.1.3 多分支结构语句 7.2 switch开关语句 8. 循环结构语句8.1 for循环8.2 …...
wxWidgets GUI 跨平台 入门学习笔记
准备 参考 https://wiki.wxwidgets.org/Microsoft_Visual_C_NuGethttps://wiki.wxwidgets.org/Tools#Rapid_Application_Development_.2F_GUI_Buildershttps://docs.wxwidgets.org/3.2/https://docs.wxwidgets.org/latest/overview_helloworld.htmlhttps://wizardforcel.gitb…...
Aws batch task 无法拉取ECR 镜像unable to pull secrets or registry auth 问题排查
AWS batch task使用了自定义镜像,在提作业后出现错误 具体错误是ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. C…...
亚信安全发布2024威胁年报和2025威胁预测
在当今数字化时代,网络空间已成为全球经济、社会和国家安全的核心基础设施。随着信息技术的飞速发展,网络连接了全球数十亿用户,推动了数字经济的蓬勃发展,同时也带来了前所未有的安全挑战。2024年,网络安全形势愈发复…...
verb words
纠正correct remedy 修正modify 协商 confer 磋商/谈判 negotiate 通知notice notify *宣布announce 声明declare 宣告 declare *颁布 promulgate /introduce 协调coordinate 评估evaluate assess 撤离evacuate *规定stipulate 参与participate, 涉及refer…...
程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<12>
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 目录 一、回调函数二、qsort2.1 使用qsort函数排序整型数据2.2 使用qsort排序结构数据2.3 qsort函数的模…...
视频录像机视频通道是指什么
视频录像机的视频通道是指摄像机在监控矩阵或硬盘录像机设备上的视频输入的物理位置。 与摄像头数量关系:在视频监控系统中,有多少个摄像头就需要多少路视频通道,通道数量决定了视频录像机可接入摄像头的数量,一般硬盘录像机有4路…...
MySQL 实战 4 种将数据同步到ES方案
文章目录 1. 前言2. 数据同步方案 2.1 同步双写2.2 异步双写2.3 定时更新2.4 基于 Binlog 实时同步 3. 数据迁移工具选型 3.1 Canal3.2 阿里云 DTS3.3 Databus3.4 Databus和Canal对比3.4 其它 4. 后记 上周听到公司新同事分享 MySQL 同步数据到 ES 的方案,发现很有…...
sqlserver中的锁模式 | SQL SERVER如何开启MVCC(使用row-versioning)【启用行版本控制减少锁争用】
文章目录 引言锁和隔离级别的关系锁模式之间兼容性I 隔离级别SQLServer默认的隔离级别为:“read commited” (已提交读)在SQLServer2005引入了基于行版本控制的隔离级别。SQL SERVER如何开启MVCC(使用row-versioning)sqlserver开启MVCC后的锁II sqlserver中的锁模式**1、共享…...
拥抱健康养生,开启活力生活
在快节奏的现代生活中,健康养生已成为人们关注的焦点,它不仅是对身体的呵护,更是一种积极的生活态度。 合理饮食是健康养生的基石。我们应秉持均衡膳食的理念,谷物、蔬菜、水果、蛋白质类食物一个都不能少。每天保证足够的蔬菜摄入…...
江科大51单片机笔记【9】DS1302时钟可调时钟(下)
在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…...
Python可视化——地理空间型图表(自用)
地图信息可视化的实现就是将不可展开的曲面上的地理坐标信息转化为二维平面进行显示,这个过程也叫地图投影(空间三维投影到平面二维) 地图投影的要求:等面积、等角度、等距离。总的来说就是映射到二维平面中的任何点通过比例尺放大…...
Python 网络爬虫教程与案例详解
Python 网络爬虫教程与案例详解 在当今数字化时代,数据的价值愈发凸显。Python 作为一门强大的编程语言,在数据获取领域有着广泛的应用,其中网络爬虫便是一项重要的技术。网络爬虫能够自动从网页中提取所需数据,极大地提高了数据…...
最新的前端场景面试题
1、如何实现一个Vue3的弹框组件,你会如何设计? 如果要实现一个 Vue3 的弹框组件,我会从以下几个关键点进行设计: 组件结构:定义组件的基础结构,包括模块(template)、脚本(script)和样式(style);显示和隐藏逻辑:设计和实现弹框的显示和隐藏机制,通常通过传递 pro…...
冲刺高分!挑战7天一篇孟德尔联合meta分析 DAY1-7
Day1 此前我们完成了若干篇关于meta的挑战,这一次挑战想在meta分析基础上进一步创新一些,这一次想要挑战孟德尔联合meta分析的文章,有想学习的师弟师妹跟我们一起完成这波挑战吧~ Day1任务收集信息明确选题明确目标期刊精读范文…...
win32汇编环境,对话框中使用树形视图示例二
;运行效果 ;win32汇编环境,对话框中使用树形视图示例二 ;得到树形视图控件Treeview的全路径字符串,这里的方法是由子项向父项挨个找的算法找齐路径 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>&g…...
前端开发10大框架深度解析
摘要 在现代前端开发中,框架的选择对项目的成功至关重要。本文旨在为开发者提供一份全面的前端框架指南,涵盖 React、Vue.js、Angular、Svelte、Ember.js、Preact、Backbone.js、Next.js、Nuxt.js 和 Gatsby。我们将从 简介、优缺点、适用场景 以及 实际…...
tomcat的web管理
进入到conf cd /usr/local/tomcat/conf/备份tomcat-users.xml cp tomcat-users.xml{.,bak}编辑tomcat-users.xml vim tomcat-users.xml增加以下内容 配置tomcat-users.xml <role rolename"manager-gui"/><role rolename"admin-gui"/><use…...
类和对象(上)
1.面向过程与面向对象的初步认识 面向过程:以步骤为中心,适合简单逻辑,但复杂系统易混乱。 面向对象:以对象职责为中心,通过抽象和模块化应对复杂需求。 C语言:面向过程,关注的是过程࿰…...
springcloud智慧工地物联网云管理系统源码
智慧工地以物联网云平台为核心,基于智慧工地物联网云平台与现场多个子系统的互联,实现现场各类工况数据采集,存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块,根据现场管理实际需求灵活组合,实现一体…...
SLAM评估工具安装及使用EVO(Ubuntu20.04安装evo)--缺少 onnx 库还有Pandas 版本不兼容解决
介绍一下我的是ubuntu20.04.机载电脑是orinnx,通过源码烧写的系统。 首先打开终端,输入 pip install evo --upgrade --no-binary evo 安装过程中出现如下问题 缺少 onnx 库还有Pandas 版本不兼容, ONNX(Open Neural Network E…...
K8S学习之基础十五:k8s中Deployment扩容缩容
deployment扩容缩容比较简单,下面介绍两种常用方法 vi deploy-demo.yaml kind: Deployment metadata:name: myapp-v1 spec:replicas: 2selector:matchLabels:app: myappversion: v1template:metadata:labels:app: myappversion: v1spec:containers:- name: myappim…...
ClickHouse 中出现 DB::Exception: Too many parts 错误
在 ClickHouse 中出现 DB::Exception: Too many parts 错误,通常是由于表中数据分片(parts)数量超过系统限制,导致合并(merge)操作无法及时处理。以下是逐步解决方案: 1. 理解问题原因 MergeTr…...
PPT 小黑第20套
对应大猫21 Word转PPT 图片也得复制 题目要求两套PPT母板,应用不同版式(版式那就可以选) 竖排文字...
大模型管理工具:LLaMA-Factory
目录 一、安装与环境配置 二、启动 Web 界面 三、数据准备 四、模型训练 五、模型评估 七、模型导出 八、API服务部署 LLaMA-Factory 是一个开源的大语言模型(LLM)微调框架,旨在简化大规模模型的训练、微调和部署流程。它支持多种主…...
【机器人栅格地图】基于鹭鹰算法SBOA实现机器人栅格地图路径规划(目标函数:最短距离)附Matlab代码
基于鹭鹰算法(SBOA)的机器人栅格地图路径规划实现 一、鹭鹰算法(SBOA)的基本原理 鹭鹰优化算法(Secretary Bird Optimization Algorithm, SBOA)是一种新型元启发式算法,灵感源自鹭鹰的捕猎和逃…...
【Linux篇】版本控制器-Git
📌 个人主页: 孙同学_ 🔧 文章专栏:Liunx 💡 关注我,分享经验,助你少走弯路! 文章目录 1.如何理解版本控制?2.Git的操作补充细节问题 1.如何理解版本控制? 版…...
论文阅读:KAM-CoT: Knowledge Augmented Multimodal Chain-of-Thoughts Reasoning
论文来源:AAAI 2024 论文地址:https://ojs.aaai.org/index.php/AAAI/article/view/29844 Abstract LLM通过利用能够逐步思考的思维链在NLP任务中取得了很好的性能,但是为LLM扩展多模态能力时计算成本高,且需要大量的硬件资源。…...
linux内存页块划分及位图存储机制
page_alloc.c - mm/page_alloc.c - Linux source code v5.4.285 - Bootlin Elixir Cross Referencer 一. 什么是页块(Pageblock)? 定义:页块是物理内存中的一个连续区域,由 2^pageblock_order 个物理页(Pag…...
一台云工作站是否能通过共享云桌面让10人流畅进行三维设计
云工作站,作为一种基于云计算技术的远程工作站解决方案,它将高性能的计算资源集中在云端服务器上,用户通过网络访问这些资源,实现高效、灵活的办公和创作环境。而三维设计,尤其是涉及复杂模型、高精度渲染等领域&#…...
安卓应用之服务
服务 服务也是四大组件之一,用于执行长时间运行操作的组件,它与用户界面(UI)是分开的,因此即使用户切换到其他应用,服务依然可以继续运行。主要用于处理一些不需要用户交互的任务。例如,播放音…...
【Vue CLI脚手架开发】——6.scoped样式
文章目录 一、scoped是什么二、应用案例1.使用代码2.原理3父组件App未添加scoped影响 一、scoped是什么 我们知道vue为了防止css样式污染,在每个组件中提供了 scoped属性进行限定css作用域;当<style>标签有 scoped 属性时,它的 CSS 只…...
JVM参数调整
一、内存相关参数 1. 堆内存控制 -Xmx:最大堆内存(如 -Xmx4g,默认物理内存1/4)。-Xms:初始堆内存(建议与-Xmx相等,避免动态扩容带来的性能波动)。-Xmn:新生代大小&…...
NodeJS学习笔记
NodeJS软件安装 node环境安装: https://nodejs.org 安装好后的node通常在C:\Program Files\nodejs验证安装是否成功 node -v npm -v 进入REPL模式命令行模式 nodeNodeJS在REPL模式和编辑器使用 windos在dos下常用命令 windos命令: 1、cmd dos系统2、…...
缺陷管理工具-禅道
目录 一、禅道的介绍 二、禅道的特点 三、禅道使用流程 1.管理缺陷 2.管理用例 黑马测试视频学习记录 一、禅道的介绍 二、禅道的特点 三、禅道使用流程 1.管理缺陷 2.管理用例...
C++ 单词识别_牛客题霸_牛客网
点击链接即可查看题目: 单词识别_牛客题霸_牛客网 一、题目 描述 输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,次数一样的按照单词小写的字典序排序输出,要求能识别英文单词和句号。 输入…...
qt open3dAlpha重建
qt open3dAlpha重建 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionAlpha_triggered();//alpha重建 void MainWindow::...
PS内发光、外发光
内外发光(图层样式–》内发光、外发光):(滤色 效果最好) 内发光–》结构:内发光的外形 内发光–》图素:渐变发光细节的调整 内发光–》品质:增加质感 内发光–》图素–》阻塞&#x…...
C++之thread_local变量
C之thread_local变量_c threadlocal-CSDN博客 thread_local简介 thread_local 是 C11 为线程安全引进的变量声明符。表示对象的生命周期属于线程存储期。 线程局部存储(Thread Local Storage,TLS)是一种存储期(storage duration),对象的存储是在…...
鸿蒙开发中,数据持久化之Transaction(事务)的概念及应用
SQLite 数据库具备事务处理能力。 事务本质上是一组操作的集合,它具有原子性,意味着这一系列操作要么全部成功执行,要么全部失败,不存在部分操作成功而部分失败的中间状态。 以常见的转账功能为例,A 账户向 B 账户转账…...
软考高项笔记 1.1.1 信息
1.1.1 信息 📚 信息(Information) 是物质、能量及其属性的标示的集合,是确定性的增加。它以物质介质为载体,传递和反映世界各种事物存在方式、运动状态等的表征。信息不是物质,也不是能力,它以一种普遍形式,…...
【TCP/IP协议栈】计算机网络知识补充
参考资料: 前言 【计算机网络知识】 总结 IP 在互联网中MAC 在局域网中 1. IP地址 IP地址有两个版本,IPv4和IPv6。IPv6现在并没有普及使用,所以现在使用的地址大部分依然是IPv4。 IP地址是在IP协议中,用来标识网络中不同主机的…...
【C++进阶学习】第一讲——继承(下)---深入挖掘继承的奥秘
目录 1.隐藏 1.1隐藏的概念 1.2隐藏的两种方式 2.继承与友元 3、继承与静态成员 4.单继承和多继承 4.1单继承 4.2多继承 5.菱形继承 问题1:冗余性 问题2:二义性 6.虚拟继承 7.总结 1.隐藏 1.1隐藏的概念 在 C 中,继承是一种机制…...
IDEA Generate POJOs.groovy 踩坑小计 | 生成实体 |groovy报错
一、无法生成注释或生成的注释是null 问题可能的原因: 1.没有从表里提取注释信息,修改def calcFields(table)方法即可 def calcFields(table) {DasUtil.getColumns(table).reduce([]) { fields, col ->def spec Case.LOWER.apply(col.getDataType().…...
数据结构与算法 计算机组成 八股
文章目录 数据结构与算法数组与链表的区别堆的操作红黑树定义及其原理 计算机组成int和uint的表示原码反码补码移码的定义?为什么用补码? 数据结构与算法 数组与链表的区别 堆的操作 红黑树定义及其原理 计算机组成 int和uint的表示 原码反码补码移…...