持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
1.什么是传递依赖
A依赖B,B依赖C,在A没有配置对C的依赖的情况下,A能直接使用C,这就是传递依赖。
2.传递依赖的原则
在A依赖B,B依赖C的前提下,C能否传递到A是有条件的,这个条件是B依赖于C时所确定的依赖范围。
- B依赖于C的时候,如果依赖范围是compile了,那么A依赖于B时,A是可以使用C的。
- B依赖于C的时候,如果依赖范围是test或者provided,那么A依赖于B时,A是无法使用C的。如果A确实需要C的话,那么需要A直接去依赖C。
3.验证
- 我们创建一个项目,项目叫pro01-maven-java(这个项目叫什么无所谓,这个项目现在相当于A)
- 为pro01-maven-java项目导入spring-core依赖。spring-core相当于B
<!--以 compile 范围导入 spring-core 依赖,测试依赖的传递性-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
3.在idea里面查看依赖情况。你会发现commons-logging(相当于C)被引入pro01-maven-java。也就是说pro01-maven-java可以使用commons-logging
在前面,我们说过A依赖B,B依赖C。如果A想通过B依赖C的话,那么取决于B对C的依赖范围。根据上面的结果,我们发现pro01-maven-java没有直接依赖commons-logging,却有了commons-logging。我们现在打开本地仓库的spring-core,查看spring-core的pom文件内容。内容如下:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
<scope>compile</scope>
</dependency>
发现spring-core对commons-logging的依赖范围是compile。