maven详解scope

maven的scope相信很多人都有些迷糊

问题1:scope在哪里?

问题2:scope是什么?

问题3:scope怎么用?

我们来一一解答这些问题。

1.scope在哪里?

 

我们都知道,dependency里面有三个元素:g,a,v(groupID,artifactID,version)

其实dependency里面还有几个其它的元素。

其中有一个就是scope

 

2.scope是什么 ?

scope是控制该外部包在程序的运行中的哪个时期被使用,编译,测试,运行这三个阶段中的哪一个。

scope有5个可选值:compile,test,provided,runtime,system

对应的三个阶段对应的可选值:compile,test,runtime

scope的设置可以给最终打包的时候的大小控制

 

3.scope怎么用?

compile:

compile是我们使用的最多的一个(也是scope的默认的一个,如果不写scope属性,那么就是compile)

complie是指的是编译,测试,运行中都会用到,也就是说,默认的是所有的环节都会用到。

  

 

 

test:

test是测试的时候用的,也就是说不参与打包,那么也就是说打包的时候会小一些

比如说junit一般都是test,也就是说在测试环节会用到,但是正式环节不会用到,那么就可以用到test

  

 

runtime:

runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。
  

  

 

 

provided:

provided指的是打包时不会打包进去,但是会参与编译,测试,运行。在依赖中也不会继承下去。这里的sevlet在tomcat里面有,所以不用打包进去,但是其它地方又会用到。

  

 

system:

system指的是有些包不能通过gav直接找到,或者是自己写的包。我们有一种作法是加入到classpath里面去。但是那样不利于后面的人理解和操作。

maven提供了一种方式,就是scope写system,同时再加一个元素<systemPath><systemPath/>这里写jar的路径(这样也可以直接引用了)

systemPath案例:<systemPath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systemPath>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值