简述Maven中的scope标签

764 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

写在前面

在我们使用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有效范围依赖传递
compileall
providedcompile, test
runtimeruntime, test
testtest
systemcompile, test

总结

如正文中所示,maven的scope属性其实一目了然,在项目中其实有很多的例子可以供我们参考,下面我们来看几个例子吧。

如文章开头我们刚说的test相关的jar包,这就是很典型的scope等于test的例子了。

如servlet-api相关的jar包,则会在正常的编译环境和测试环境中进行引入,生产环境就没有必要引入了,因为像tomcat这种中间件,基本上都已经引入了相关的jar包,这类的情况就不需要我们再过多的进行引入了。