作用
- 首先,maven在编译项目主代码的时候需要使用一套classpath。
- 其次,maven在编译和执行测试的时候会使用另一套classpath。
- 最后,实际运行maven项目时,又会使用一套classpath。
- 即:
- 编译classpath、
- 测试classpath、
- 运行classpath
依赖范围就是用来
控制依赖与这3种classpath的关系。
种类
compile:编译
- 默认使用就是该范围。
- 编译、测试、运行3种classpath都有效。
test:测试
- 测试。
- 例如junit
provided:已提供
- 编译、测试。
- 例如servlet-api。运行的时候容器已经提供,不需要maven项目重复引入。
runtime:运行时
- 测试、运行。
- 例如jdbc驱动实现,项目主代码编译只需要jdk提供的jdbc接口,只有执行测试或运行项目时才需要。
system:系统
- 与provided一样,对编译、测试有效。
- 但是,使用system范围的依赖时必须通过
systemPath元素
显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
import:导入
- 不会对3中classpath产生实际影响。