MVN明明添加了依赖确还是报找不到

在Spark和Flume对接时遇到找不到log4j和slf4j的错误,添加依赖后仍报错,原来是scope设置不当。Maven的scope默认是compile,而test只用于测试阶段,不会加载到运行项目中。了解不同scope的作用,如compile、test、runtime、provided和system,能帮助正确管理依赖,避免类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天做spark和flume对接的时候,特么的一直报找不到啥log4j,slf4j-NOP bind啥的或者版本不兼容啥的,一查说少依赖了,于是到mvnrepository去找到了,添加了上去,结果还是一直报找不到啊,加载失败啊

最后才发现原来特么的是因为这scope(范围)自带的参数不对,test这东西默认是不加载到运行项目里的,吐血

Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了。今天梳理一下maven的scope。

scope的分类和作用

(1)compile
默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。

(2)test
scope为test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行,这个东西他是不加载到你的编译项目下面的!!所以有这个test,就有可能出现明明加了依赖,却还是报错。

(3)runntime
runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值