背景:在maven的pom.xml配置文件中,依赖有一个可选参数scope,它标识的是依赖的范围,具体是干什么用的?
举例:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.8</version>
<scope>test</scope>
</dependency>
maven在编译项目主代码的时候需要使用classpath,对于maven一共有3套classpath:编译classpath,测试classpath,运行classpath
scope就是用来控制依赖和这3套classpath的关系
scope的值有以下几个:
compile:默认值,对于三套classpath都有效
test:仅对测试classpath有效,因此只有在运行测试(例如junit)时才能import依赖
provided:对于编译和测试classpath有效
runtime:对于测试和运行classpath有效
system:依赖范围和provided一致,但是该依赖是存放于本地,需要由systemPath元素来显示指定依赖文件的路径
<dependency>
<group>javax.sql</group>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/rt.jar</systemPath>
</dependency>
- import 对三套依赖classpath都没有影响,较少用