这个概念不是很难理解,也不是很难解释,感觉大家对这个点的疑问并不多。
简单整理一下,也没有过多赘述。
compile/provided/runtime/test/import/system
示意图:
翻译:
说的是一个dependencyManagement中的dependency,如果scope是
import
形式的,那么这个dependency不参与依赖传递。
只是把dependency需要的依赖都取过来,像个占位符一样替换了就行。
或者说像前端框架里的占位符
JSP、.NET Razor 页面等里面的占位符,
总是就是个占位符的作用。
其他形式还是要具体看官网怎么说。
以下附上一点川哥的原话:
scope 有 test, compile, runtime 等
;
test在本地会引入,不过打包的时候不会被引入,用于maven test结构中代码的正常执行,但不打入包中,以减小线上部署包的尺寸。
compile为正常引入模式,表示编译会用它,那么大概率情况,执行也会用它,package会打包进去,至少会把依赖的class打包进去。
runtime的作用,是为了本地编译不出错,但package时不打包进去,但按照字面理解,这个玩意儿是要运行时用的啊,那怎么办呢?
那就在运行环境中,必须有这个包。
比如tomcat中,会有servlet/jsp api,这种api是在运行时使用的,tomcat中自带;
但你项目中编译也会用到,为了本地编译不报错,就要引入,但为了不和线上tomcat发生版本冲突,就要标记为runtime,这样本地编译可用,但打包不引入。
综上,简而言之,maven依赖里面的这个scope
,就像是java注解里面的那个@retention(xxx)
那个意思一样,有点“生命周期”的感觉,能体会到,理解到这个意思,基本上就够了。具体只是生效到哪个阶段而已。