JUnit是Java社区事实上的单元测试标准,这个依赖特殊的地方在于一个值为test的scope子元素,scope用来定义依赖范围。该依赖只会被加入到测试代码的classpath中。对于项目主代码,该依赖是没有任何作用的.JUnit是单元测试框架,只有在测试的时候才需要,因此使用该依赖范围。
Maven在编译项目主代码的时候需要使用一套classpath。在编译和执行测试的时候会使用另外一套classpath。实际运行maven项目的时候,又会使用一套classpath。
所以依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系。maven有以下几种依赖范围:
**▶compile:**编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三 种classpath都有效。典型的例子是spring-core,在编译、测试和运行的时候都需要使用该依赖。
**▶test:**测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是JUnil,它只有在编译测试代码及运行测试的时候才需要。
**▶provided:**已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classPath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引人—遍。
**▶runtime:**运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接