以servlet的maven依赖为例
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
这里的scope就是他的依赖范围,maven会根据时机去自动判断是否导入该jar包
依赖范围 | 编译有效 | 测试有效 | 运行有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-core |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驱动 |
system | Y | Y | - | 本地的,Maven仓库之外的类库 |
compile编译、测试、运行,在编译时依赖,并且在测试和运行时也依赖
例如: strus-core、spring-beans。打到war包或jar包
provided编译、和测试有效,在编译和测试时需要
例如: servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)不会打到war
runtime:测试、运行有效
例如: jdbc驱动包,在开发代码中针对java的jdbc接口开发,编译不用在运行和测试时需要通过jdbc驱动包(mysq驱动)连接数据库,需要的会打到war
test:只是测试有效,只在单元测试类中用
例如: junit
不会打到war
按照依赖强度,由强到弱来排序:(理解)
compile>provided> runtime> test
原文:https://www.cnblogs.com/kehao/p/14602480.html