配置Junit依赖时,我们这样配置:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
其中的scope就是依赖范围,依赖范围作用于classpath。依赖范围与三种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仓库之外的类库文件 |
Maven依赖范围不仅控制依赖与classpath的关系,还会影响依赖传递。
最左边一列表示第一直接依赖范围,最上面一行表示第二直接依赖范围,中间的交叉单元格则表示传递性依赖范围。
compile | test | provided | runtime | |
compile | compile | --- | --- | runtime |
test | test | --- | --- | test |
provided | provided | --- | provided | provided |
runtime | runtime | --- | --- | runtime |
仔细观察上面表格,我们发现这样的规律:
|