maven3实战之坐标和依赖(传递性依赖)

川长思鸟来 2021-06-24 13:59 476阅读 0赞

maven3实战之坐标和依赖(传递性依赖)

-————-

1.何为传递性依赖

假如有一个account-email项目,该项目有一个org.springframework:spring-core:2.5.6的依赖,而实际上spring-core也有它自己的依赖,我们可以直接访问位于中央仓库的该构件的POM: http://repo1.maven.org/maven2/org/springframework/spring-core/2.5.6/spring-core-2.5.6.pom。该文件包含了一个commons-logging依赖。该依赖没有声明依赖范围,那么其依赖范围就是默认的compile。同时回顾一下account-email,spring-core的依赖范围也是compile。account-mail有一个compile范围的spring-core依赖,spring-core有一个compile范围的commons-logging依赖,那么commons-logging就会成为account-email的compile范围依赖,commons-loggins是account-email的一个传递性依赖。

有了传递性依赖机制,在使用spring的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖。maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递依赖的形式引入到当前的项目中。

2.传递性依赖和依赖范围

依赖范围不仅可以控制依赖与三种classpath的关系,还对传递性依赖产生影响。上面的例子中,account-email对于spring-core的依赖范围是compile,spring-core对于commons-logging的依赖范围是compile,那么account-email对于commons-logging这一传递性依赖的范围也就是compile。假设A依赖B,B依赖C,我们说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖。第一直接依赖的范围和第二直接依赖的范围决定了传递性依赖的范围,如下图,最左边一列表示第一直接依赖范围,最上面一行表示第二直接依赖范围,中间交叉单元格表示传递性依赖范围。







































  compile test provided runtime
compile compile runtime
test test test
rpovided provided provided provided
runtime runtime runtime

发表评论

表情:
评论列表 (有 0 条评论,476人围观)

还没有评论,来说两句吧...

相关阅读

    相关 maven依赖传递

    maven的依赖传递性 `当项目A依赖于B,而B又依赖于C的时候,自然的A会依赖于C,这样Maven在建立项目A的时候,会自动加载对C的依赖。` 一、依赖传递对版本的

    相关 Maven 如何处理传递依赖

    maven引入的传递性依赖机制,一方面大大简化和方便了依赖声明,另一方面,大部分情况下我们只需要关心项目的直接依赖是什么,而不用考虑这些直接依赖会引入什么传递性依赖。但有时候,

    相关 MAVEN-依赖传递

    依赖传递性 在项目往往需要引入多个依赖, 而引入的依赖又会引入其他的依赖。 例如: 项目中引入了spring-core依赖, 而spring-core又依赖common

    相关 maven传递依赖与NoSuchMethodError

    对于maven, 很多人看似很熟悉,其实貌似根本不了解,本文旨在解决某些方面的疑惑。 当我在service模块引入公司某业务的一个接口,由于该接口依赖了公司写的各种东西和sp

    相关 maven依赖传递依赖

    目录 依赖范围 传递性依赖 依赖调节 > 本文主要是针对《maven实战》书中关键知识点的学习记录,未免有纰漏或描述不到之处,建议购买阅读原书 首先贴出