# Scope 的作用
概述:
Maven 中使用 scope 来指定当前包的依赖范围和依赖的传递性。常见的可选值有: complie、provide、runtime、test、system 等
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.1.RELEASE</version>
<scope>test</scope>
</dependency>
# scope 取值
- complie
- 范围:all
- 依赖传递:是
- 例子:spring-core
- 详解:complie 为默认的依赖有效范围。如果没有明确指定依赖有效范围的花,则默认采用该值。在编译、运行、测试时均有效
- provided
- 范围:complie、test
- 依赖传递:否
- 例子:servlet-api
- 详解:provided 在编译、测试时有效,但是在运行时无效。例如 servlet-api 依赖,在部署到 tomcat 服务器中,容器已经提供了,就不再需要 maven 重复引入了
- runtime
- 范围:runtime、test
- 依赖传递:是
- 例子:JDBC 驱动
- 详解:runtime 在运行、测试时有效,但是在编译时无效。例如 JDBC 的驱动实现
- test
- 范围:test
- 依赖传递:否
- 例子:JUnit
- 详解:只在测试时有效,例如 Junit
- system
- 范围:complie、test
- 依赖传递:是
- 例子:
- 详解:system 在编译、测试时有效,但是在运行时无效。与 provided 的区别是,使用 system 范围依赖时,必须通过 systemPath 元素显示指定依赖文件的路径。此依赖时通过本机绑定的,不可移植使用,因此要谨慎使用。systemPath 元素可以引用环境变量。例如:
<dependency> <groupId>javax.sql</groupId> <artifactId>jdbc-stdext</artifactId> <version>2.0</version> <scope>system</scope> <systemPath>${java.home}/lib/rt.jar</systemPath> </dependency>
在编译或者是运行时有效的范围依赖,在打包时会一起打包