maven的scope标签用来声明依赖的作用域,包含compile、test、provided、runtime、system和imported。使用示例如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
其中runtime、system和imported不常见,暂时不讲,本问仅介绍另外三个。
1.compile:默认的作用域,不需要显式声明。它也是最常用的,使用这个作用域的依赖,参与编译、测试和运行时。
2.test:仅参与测试。
3.provided:参与编译、测试,但是运行时不需要,默认由容器提供。比如servlet-api依赖,tomcat容器会提供,所以声明为provided就可以。
PS:实际测了一下provided的效果
- 如果B依赖C,B将C声明为provided,则B打出的jar包,最终包含C。
- 如果A依赖B,B依赖C,B将C声明为provided,则A打出的jar包,最终不包含C。
所以provided这个scope会阻止maven的依赖传递