在maven项目的构建中,依赖是很重要的,也是其很重要的应用之一,依赖关系通常在每个pom.xml文件中配置,依赖在maven项目的的作用就类似于java中的导入某个包,某个构建只有经过依赖声明之后,其包中的功能函数才能够在该maven项目中得到调用。
在依赖的配置中主要有一下几点:
1,坐标,用来表示依赖的是哪个构建
2,<scope>依赖范围,表示该依赖能够在哪些范围内支持被调用
3,<optional>可选依赖,如果某个项目中存在不同的有依赖关系的特性,而这些特性又是互斥的,比如某个某个工具包支持多种数据库,包括mysql,PostgreSql,而在实际使用的时候,只能依赖一个,所以需要将这些依赖都表示为可选的,此外可选依赖并不具备依赖传递性。
4,<exclusion>,用来排斥传递性依赖
其中主要有一下一些复杂的概念:
*依赖范围<scope>*,maven项目的在编译的时候使用的是一套classpath,这些classpath指的是程序在编译过程中需要的一些class,在测试的时候又需要另外一套classpath,而实际在运行的时候又需要第三套classpath,这三套classpath可能有重叠教程,而scope就是规定哪些依赖在哪套classpath是需要的,依赖范围标识有
compile:编译,测试,运行
test:测试
proveide: 编译,测试
runtime:运行
system:编译 测试 但是仅限于本地并且不是maven仓库中的类库文件!
*传递性依赖,*比如A>B>C表示A依赖B,B依赖C,这A依赖B是第一依赖,B依赖C是第二依赖,那么A对C的依赖范围是多少呢,下标规定
对于该表的具体理解见,http://seanzhou.iteye.com/blog/1688740。
*依赖调解,依赖也会带来一些问题,比如不同的依赖路径中依赖到了同一个构建,那么该maven应该依赖那个构建,比如A>B>C>D,A>E>D,两条路径中都依赖到了D,为了调解该依赖,特对依赖关系作出如下规定:
路径短的优先,路径相同去先声明的依赖。