写在前面
在我们使用Maven的过程中,经常会遇到使用scope来规范当前依赖的使用范围和传递性,并且在这个基础上Maven也提供而来compile、provide、runtime、test、system等多种可选配置,比如下面代码所示:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
我们经常使用的springboot的test模块,基本上都会被设置上scope等于test的标签值,接下来我们来看一下具体的介绍吧。
正文
maven提供了五种可选配置,这些配置的指定依赖范围和传递性各有不同。
首先我们先来了解一下一共有哪些依赖范围,如compile(编译)、runtime(运行时)、test(测试),三种依赖范围。
关于传递性的解释,请查看这篇文章简述Maven中的‘传递性’关键词 - 掘金 (juejin.cn)。
了解了这些,下面我们就能看看这五种可选配置的区别和特征了。
scope | 有效范围 | 依赖传递 |
compile | all | 是 |
provided | compile, test | 否 |
runtime | runtime, test | 是 |
test | test | 否 |
system | compile, test | 是 |
总结
如正文中所示,maven的scope属性其实一目了然,在项目中其实有很多的例子可以供我们参考,下面我们来看几个例子吧。
如文章开头我们刚说的test相关的jar包,这就是很典型的scope等于test的例子了。
如servlet-api相关的jar包,则会在正常的编译环境和测试环境中进行引入,生产环境就没有必要引入了,因为像tomcat这种中间件,基本上都已经引入了相关的jar包,这类的情况就不需要我们再过多的进行引入了。