0
点赞
收藏
分享

微信扫一扫

maven的<dependency>里面的<scope>import</scope>怎么理解?


这个概念不是很难理解,也不是很难解释,感觉大家对这个点的疑问并不多。
简单整理一下,也没有过多赘述。

官网:
​​​官网Dependency Scope相关​​

compile/provided/runtime/test/import/system

示意图:

maven的<dependency>里面的<scope>import</scope>怎么理解?_占位符


翻译:

说的是一个dependencyManagement中的dependency,如果scope是​​import​​​形式的,那么这个dependency不参与依赖传递。
只是把dependency需要的依赖都取过来,像个占位符一样替换了就行。

maven的<dependency>里面的<scope>import</scope>怎么理解?_tomcat_02


或者说像前端框架里的占位符

JSP、.NET Razor 页面等里面的占位符,

总是就是个占位符的作用。

其他形式还是要具体看官网怎么说。

以下附上一点川哥的原话:

maven的<dependency>里面的<scope>import</scope>怎么理解?_maven scope_03

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)​​那个意思一样,有点“生命周期”的感觉,能体会到,理解到这个意思,基本上就够了。具体只是生效到哪个阶段而已。


举报

相关推荐

0 条评论