Maven 编译项目主代码的时候使用一套 classpath,在编译执行测试的时候使用另一套 classpath,而实际运行 Maven 项目时候又会使用一套 classpath,因此总共有三套 classpath。
依赖范围就是来控制与这三种 classath(编译 classpath,测试 classpath,运行 classpath)的关系。如果没有指定依赖范围,就会默认使用 compile
依赖范围。
依赖范围和三种 classpath 的关系如下:
依赖范围 (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 仓库外的类库文件 |