七、依赖的传递性
1.依赖的传递性
①概念
A依赖B,B依赖C,那么在A没有配置对C的依赖的情况下,A能不能直接使用C?
②传递的原则
在A依赖B,B依赖C的前提下,C能否传递到A,取决于B依赖C时使用的依赖范围
- B依赖C时使用的是compile范围:可以传递
- B依赖C时使用test或者provided范围:不能传递。所以需要这样的jar包时,就必须在需要的地方明确配置依赖才可以。
2.使用compile范围依赖spring-core
测试方法:让pro01-maven-java工程依赖spring-core
具体操作:编辑pro01-maven-java工程根目录下的pom.xml,添加如下依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
使用mvn dependency:tree
来查看工程的依赖树
可以看到工程有依赖spring-core,并且spring-core和commos-logging都是compile范围的。
这样相当于pro01工程是A,spring-core是B,commons-logging是C,是A依赖B,B依赖C的结构。
那么C有传递到A呢?
使用mvn dependency:list
验证一下
以上结果表明,A中依赖C,compile范围是可以传递的。
3.验证test和provided范围不能传递
我们查看pro02-maven-web工程的依赖树,发现对pro01工程依赖树,只有spring传递过来了,junit那些并不存在,证明test和provided不能传递