传递依赖的范围确定

传递依赖的确定

问题:如果A依赖B(A→B),B依赖C(B→C),那么A是否一定依赖C(A→C)? 如果A依赖C,A依赖C的范围是什么?是compile还是test还是provided还是runtime?下表是这个问题的答案:

 

Un1O9H.png

 

 

表1

 

根据上表,有:当A→B的范围是compile, B→C的范围是test,那么A不依赖于C。

这样理解:假设C就是 junit,即要使用 junit对B的功能进行单元测试(B→C),A要使用B提供的功能(A→B),但是A不一定要使用junit进行单元测试。

在IDEA中验证

  1. 创建模块m_parent和他的两个子模块m_child01, m_child02,m_child01依赖junit,servlet,spring-context,m_child02依赖m_child01
    UnU5TI.png UnUTtP.png UnU7ff.png UnUokt.png

  2. 查看依赖:通过Maven Projects窗口的Show Dependencies查看m_child01和m_child02的依赖
    UndzWV.png

    • m_child01的依赖
      Un0nNn.png
    • m_child02的依赖
      Un0uhq.png
  3. 可以看到:

    • m_child01依赖junit,范围是test,m_child02依赖m_child01,范围是compile,得到m_child02不依赖junit,符合表1中第2行第5列的情况。
    • m_child01依赖servlet,范围是provided,m_child02依赖m_child01,范围是compile,得到m_child02不依赖servlet,符合表1中第2行第3列的情况。
    • m_child01依赖spring-context,范围是compile,m_child02依赖m_child01,范围是compile,得到m_child02依赖spring-context,且范围是compile,符合表1中第2行第2列的情况。
posted @ 2020-07-09 21:40  学习java进行时  阅读(198)  评论(0编辑  收藏  举报