【Maven】属性scope依赖作用范围详解
admin
2024-03-15 10:08:05
0

文章目录

    • 前言
    • scope取值和作用表
    • 详解
      • compile
      • provided
      • system
      • runtime
      • test
      • import

前言

Maven中使用 scope 来指定当前包的依赖范围和依赖的传递性。常见的可选值有:compile,provided,runtime,test, syste,import 等。scope 主要是用在 pom.xml 文件中的依赖定义部分,例如:

javax.servletjavax.servlet-api4.0.1provided

scope取值和作用表

scope取值有效范围依赖传递是否打入jar包例子
compileallspring-core
providedcompile,testservlet-api
systemcompile,test
runtimeruntime,testJDBC驱动
testtestJUnit
import

详解

compile

为默认的依赖有效范围。定义依赖关系没有指定依赖有效范围,默认采用该依赖有效范围;

此种依赖,在编译、运行、测试时均有效,会以依赖传递,打入jar包;

provided

在编译、测试时有效,但是在运行时无效。provided意味着打包的时候不会打入jar包,别的设施(Web Container)会提供。

事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。

例如:servlet-api,运行项目时,容器已经提供,就不需要打入jar包了。

说到provided,这里就要说到 dependency 下的子标签 optional ,如果一个依赖的 optional 设置为true,则该依赖在打包的时候不会被打进jar包,同时不会通过依赖传递传递到依赖该项目的工程;例如:x

依赖B,B由依赖于A(x->B->A),则A中设置 optional 为true的依赖不会被传递到x中。

两者区别:

1、为true 表示某个依赖可选,该依赖是否使用都不会影响服务运行;

2、provided的在目标容器中已经提供了这个依赖,无需在提供

system

system依赖不是由maven仓库管理,而是本地的jar包,因此必须配合systemPath标签来指定本地的jar包所在全路径。这类jar包默认会参与编译、测试,但是不会被参与打包阶段。如果也想打包进去的话,需要在插件里做配置true;

//引用本地jar包
com.mytesttest1.0system${pom.basedir}/lib/test-1.0.jar

由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。

runtime

在运行、测试时有效,但是在编译代码时无效,打入jar包;
例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动。

test

只在测试时有效,包括测试代码的编译,执行,不会打入jar包;例如:JUnit。

import

import 只能在pom文件的中使用,从而引入其他的pom文件中引入依赖;
如:在Spring boot 项目的POM文件中,我们可以通过在POM文件中继承 Spring-boot-starter-parent来引
用Srping boot默认依赖的jar包,如下:

org.springframework.bootspring-boot-starter-parent2.0.1.BUILD-SNAPSHOT

但是,通过上面的parent继承的方法,只能继承一个 spring-boot-start-parent。实际开发中,用户很可能需要继承自己公司的标准parent配置,这个时候可以使用 scope=import 来实现多继承。代码如下:

     org.springframework.bootspring-boot-dependencies2.0.1.BUILD-SNAPSHOTpomimport

通过上面方式,就可以获取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT.pom文件中dependencyManagement配置的jar包依赖。如果要继承多个,可以在dependencyManagement中添加,如:

     org.springframework.dataspring-data-releasetrainFowler-SR2pomimportorg.springframework.bootspring-boot-dependencies2.0.1.BUILD-SNAPSHOTpomimport

相关内容

热门资讯

建设银行[601939]日常公... 本版导读 2026-02-28 2026-02-28 2026-02-28 2026...
国际油价27日上涨 △资料图 国际油价27日上涨。截至当天收盘,纽约商品交易所4月交货的轻质原油期货价格上涨1.81美元...
深夜,全线大涨!中东局势,骤然... 中东紧张局势骤然升级。 今日晚间,国际黄金、白银、原油价格全线大涨,现货白银大涨超4%,WTI原油、...
*ST东易:公司及管理人已完成... 有投资者向*ST东易(002713.SZ)提问,贵公司的债转股的全部完成了吗? 2月27日,公司回答...
26日起登记领取国投白银LOF... 愉记早前专栏追踪了《国投瑞银白银 LOF 风波:当“程序正确”撞上信任危机》,我们后台收到了百余条留...
GLP-1药物广告为何应重视音... 引言 近年来,随着人们对健康管理的重视,GLP-1类药物逐渐成为糖尿病和肥胖症治疗的热门选择。然而,...
马年新春鄂州城区三大地标联动点... 马年春节假期,南浦路、庾楼、武昌门三大文旅地标联动推出特色新春活动,通过线上线下同频发力、多点联动,...
加拿大第四季度GDP萎缩0.6... 来源:环球市场播报 加拿大经济年末表现趋弱,企业库存大幅下降,推动第四季度实际国内生产总值(GDP)...
原创 美... 美国海关这次突然宣布取消对中国商品的部分关税,你说,这到底是他们为了谁? 是为了美国老百姓,还是为了...
臻宝科技科创板IPO将于3月5... 北京商报讯(记者 马换换 李佳雪)2月27日晚间,上交所官网显示,重庆臻宝科技股份有限公司(以下简称...
【加密货币支持的规则扩大信托银... 【加密货币支持的规则扩大信托银行服务获得美国最终批准】美国银行业监管机构正在扩大贷款机构在国家信托牌...
覆铜板量价齐升 生益科技202... 面对每天上千份上市公司公告该看哪些?重大事项公告动辄几十页几百页重点是啥?公告里一堆专业术语不知道算...
3 个穴位,调帕金森,不费力也... 3 个穴位,调帕金森,不费力也不花钱。只要你手抖、肢体僵硬、走路不稳的时候,按这 3 个穴位,就能舒...
“以租代买”为何受青睐?“万物... 最近一段时间,在最长春节假期的带动下,我国的消费市场活力十足。然而,在“买买买”之外,也有些人把“租...
新一批香港互认基金获批 【导读】新一批香港互认基金获批 中国基金报记者 格林 中国基金报记者获悉,摩根亚洲股票高息基金、富达...
春节假期产销两旺 “白沙好物”... 2月27日,记者从白沙电商中心获悉,今年春节假期,在浓厚的节日消费氛围带动下,“白沙好物”市场持续火...
损失4万5,和解金4100多,... 【文/羽扇观金工作室 陶立烽】 损失将近4万5,和解金才4100多,亏的越多补偿越少?国投瑞银白银...
雷军直播新一代SU7门把手:增... 红星资本局2月28日消息 2月27日,小米创办人、董事长兼CEO雷军在小米汽车工厂里进行直播,与多位...
迎接50万亿存款迁徙|搬家的钱... 开栏语:一场规模高达50万亿的存款迁徙正蓄势待发。站在财富配置的历史拐点,如何审视这波天量资金的洪流...
大连航天医院费用公开透明|下肢... 大连航天医院静脉曲张专科学科带头人杨红东:下肢静脉曲张在人群中发病率大概在7%左右。下肢静脉曲张最主...