Maven Scope取值的含义

这几天在做项目的时候遇到了scope的的问题,看到同事们写了一路径。所有看下怎么回事。

maven 依赖关系中的scope的作用。

dependency scope 

在pom4中,<dependency>中引入了<scope>,它主要管理依赖的部署,目前<scope>可以使用5个值:

1.compile   缺省值,适用于所有的阶段,会随着项目一起发布。

2.provided    类似compile,期望jdk,容器或使用者会提供这个依赖,如servlet.jar

3.runtime  只在运行时使用,如jdbc驱动,适用运行和测试阶段。

4.test 只在测试时使用,用于编译和运行测试代码。不会随着项目发布。

5.system 类似provided,需要显示提供包含依赖的jar,maven不会再respository中查找它。

依赖范围控制哪些依赖在哪些classpath中可用,哪些依赖包含在一个应用中。

 complile(编译范围)

compile是默认范围,如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时他们也会被打包

 

provided(已提供范围)

provided依赖只有当jdk或者一个容器已提供该依赖之后才使用。例如,如果开发一个web应用,你可能在编译classpath中需要可用的servlet api来编译一个servlet.但是

你不会想要在打包好的war中包含这个servlet api。这个servlet apijar由你的应用服务器或者servlet容器提供。已提供范围的依赖在编辑classpath可用,他们不是传递性的,

也不会被打包。


runtime 运行时范围

runtime依赖在运行和测试系统的时候需要,但是在编译的时候不需要。比如,你可能在编辑的时候值需要jdbc api jar.而只有在运行的时候才需要jdbc.


test 测试范围

test范围依赖,在一般的编辑和运行时都不需要,他们只有在测试编译和测试运行阶段可用。


system 系统范围

system 范围依赖和provided类似。但是你必须显示的提供一个对于本地系统中jar文件的路径。这这么做是为了运行基于本地对象编辑,而这些对象是系统类库中一部分

这样的构件应该是一直可用的。maven也不会再仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systempath元素,该范围不推荐使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值