传递性依赖
考虑一个基于Spring Framework的项目,如果不使用maven,那么在项目中就需要手动下载相关依赖。由于Spring Framework又会依赖于其他开源类库,因此实际中往往会下载一些很大的包,包含Spring Framework的jar包,以及所有依赖他的其他jar包,这样做往往会引入很多不必要的依赖包。或者还可能会造成很多错误信息,这是一个非常麻烦的事情。
Maven的传递机制会好的解决了这个问题,有了传递机制,在使用Spring Framework的时候就不用去考虑它依赖了什么,也不用考虑担心引入多余的依赖。Maven会解析各个直接依赖的POM,讲那些必要的间接依赖,以及传递性依赖的形式引入当前项目中。
传递性依赖和依赖范围
假设A依赖于B,B依赖于C,我们说A对于B是第一直接依赖,B对于C是第二直接依赖,A对C是传递性依赖。第一直接依赖的范围和第二直接依赖的范围决定了传递依赖的范围。如下图所示,最左边一行表示第一直接依赖范围,最上面一行表示第二直接依赖范围。中间交叉的单元格则表示传递依赖的范围。
规律:当第二依赖的范围是compile的时候,传递依赖的范围与第一直接依赖的范围一致;当第二直接依赖的范围是test的时候,依赖不会得以传递;当第二直接以来的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为provided;当第二直接依赖的范围为runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递性依赖的范围为runtime。