首先Maven在编译项目主代码的时候需要使用一套classpath。其次在编译测试的时候使用的时候会使用另外的classpath。最后,实际运行项目的时候又会使用另外的classpath。
依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系,Maven有以下几种依赖范围:
- compile : 默认的依赖范围,编译依赖范围。使用此依赖范围的maven依赖,对于编译、测试、运行三种classpath都有效
- test:测试依赖范围。只对测试的cleasspath有效。在编译主代码或运行项目的使用时无法使用该依赖。如JUnit,只有在编译测试代码的时候才需要。
- provided:已提供依赖范围。编译和测试classpath有效,但在运行时无效。如servlet-api编译和测试时需要但运行的时候容器已经提供,就不需要Maven重复引入。
- runtime:运行时依赖范围。运行和测试classpath有效,但在编译主代码时无效。
- system:系统依赖范围。
-
import:导入依赖范围。不会对3种classpath产生实际的影响。
依赖范围与classpath的关系