maven 依赖范围及其对传递依赖的影响

当在写 junit 测试时发现,代码报出找不到类的错误信息
在这里插入图片描述

是因为没有 junit.jar 引起的!为什么会这样呢?我们 ssm_dao 模块中有 junit 依赖,而ssm_service 模块依赖了 ssm_dao,难道 junit 不应该传递过来吗?

是因为依赖会有依赖范围,依赖范围对传递依赖也有影响,例如有 A、B、C,A 依赖 B、B依赖 C,C可能是 A的传递依赖,如下图:
在这里插入图片描述

最左边一列为直接依赖,理解为 A 依赖 B 的范围,最顶层一行为传递依赖,理解为 B 依赖 C 的范围,行与列的交叉即为 A传递依赖 C的范围。
  举例 1:

比如 A 对 B 有 compile 依赖,B 对 C 有 runtime 依赖,那么根据表格所示 A 对 C 有 runtime 依赖。

ssm_dao 依赖 junit,scop为 test
    ssm_service 依赖 ssm_dao

在这里插入图片描述

所以 ssm_dao工程所依赖的 junit 的 jar 没有加入到 ssm_service 工程。

举例 2:

如果修改 ssm_dao 工程依赖 junit 的 scop 为 compile,ssm_dao 工程所依赖的 junit 的 jar 包会加入到 ssm_service 工程中
   在这里插入图片描述
  遇到依赖没有传递过来的问题我们通常的解决方案是在本工程中直接添加依赖,而不是修改 scope 作用域,比如修改 junit 的作用域为 compile,这样并不合理,junit 只是测试时候用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值