【maven实战】05-依赖传递

时间:2022-04-24 13:19:05

考虑一个springframework的项目如果不使用maven那么在项目中就需要手动下载相关的依赖。由于spring又会依赖于其他开源类库,因此实际中往往会下载一个很大的如spring-framework-2.5.6.zip这样一个包,这里包含了所有spring的包以及它依赖的包。这么做往往引入了很多不必要的依赖。

另一种做法只下载spring-framework-2.5.6.zip这样一个包,这里不包含其他相关依赖,到实际使用在根据出错信息逐个加入相关依赖包,显然这是一个相当麻烦的事。

maven的传递性依赖机制可以很好的解决这一问题。如果我们的项目有一个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依赖,如下:

<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.1.1</version>

</dependency>
该依赖没有声明依赖范围,那么其依赖范围就是默认compile。我们的项目和spring-core的依赖范围也是compile。
我们的项目有一个compile范围的spring-core依赖,spring-core有一个compile范围的commons-logging依赖,那么commons-logging就会成为我们项目的compile范围依赖,commons-logging是我们项目的一个依赖性传递。

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