dependency元素中scope来确定依赖的范围。
首先我们要确定什么时maven的依赖范围。
maven 在编译,测试,运行的时候各有自己的一套classpath。依赖范围就是用来控制与这三种classpath的关系。maven有以下几种依赖范围:
1.compile:编译依赖范围,默认的依赖范围。使用此依赖范围的maven依赖,对编译、测试、运行的classpath都有效。
2.test:测试依赖范围,使用此依赖范围的maven依赖,只对测试classpath有效。典型的例子是JUnit,它只有在编译测试的代码及运行测试的时候才有效。
3.provided:已提供依赖范围,使用此依赖范围的maven依赖,对编译和测试classpath有效,但在运行时无效。典型例子是sevlet-api,编译和测试项目的时候需要该依赖,但在运行时候由于容器已经提供,就不需要maven重复地引入一遍。
4.runtime:运行时依赖范围,使用次依赖范围的maven依赖,对于测试和运行classpath有效,但在编译主代码的时候无效。典型的例子是jdbc驱动实现。
5.system:系统依赖范围,和provided依赖范围一样。但是,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径。
依赖范围(scope) | 对于编译classpath有效 | 对于测试classpath有效 | 对于运行classpath有效 | 例子 |
compile | Y | Y | Y | spring-core |
test | - | Y | - | JUnit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驱动实现 |
system | Y | Y | - | 本地的,maven仓库之外的类库 |