MAVEN的SNAPSHOT版本与RELEASE版本

版本区别?

①. SNAPSHOT版本代表不稳定、尚处于开发中的版本,也叫快照版本,是以-SNAPSHOT为结尾的版本号。SNAPSHOT不是一个特定的版本,而是一系列的版本的集合,其中HEAD总是指向最新的快照,对外界可见的一般也是最新版,这种给人的假象是新的覆盖了老的,从而使得使用SNAPSHOT依赖的客户端,总是可以通过重新构建(有时候需要-U强制更新)就可以拿到最新的代码。

②. RELEASE版本则代表稳定的版本,稳定版本。所有的非-SNAPSHOT结尾的版本号则都被认定为RELEASE版本,即正式版,虽然会有beta/rc之类的说法,但是这些只是软件工程角度的测试版,但是对于MAVEN而言,这些都是RELEASE版本。

版本是如何更新的?

MAVNE2会根据各个模块的版本号(pom文件中依赖的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。
①. 如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,会覆盖老的快照版本;而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,MAVEN会自动去镜像服务器中下载最新的快照版本。
②. 如果是正式版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块,则不会主动去镜像服务器上下载最新的版本。

什么场景下该用SNAPSHOT版本?

协同开发时,如果构件A依赖于构件B,由于构件B经常会更新,所以构件B应该使用 SNAPSHOT来标识自己。原因如下:

(1). 如果构件B不用SNAPSHOT版本,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天升一次甚至每个小时升一次,这就是对版本号的滥用。
(2). 如果构件B不用 SNAPSHOT版本, 但一直使用同一个RELEASE版本号,那当构件B更新后,构件A可能并不会接受到已更新的构件B。因为A所使用的仓库一般不会频繁更新RELEASE版本的缓存(即本地仓库),所以构件B以不换版本号的方式更新后,构件A在获取构件B时发现本地已有这个版本,就不会去远程仓库下载最新的构件B了。

在所有的场景中都用SNAPSHOT版本可以吗?

不可以的。正式环境中不得使用SNAPSHOT版本的库。 假设今天你依赖某个 SNAPSHOT版本的第三方库成功构建了自己的应用,明天再构建时可能就会失败,因为今晚第三方可能已经更新了它的SNAPSHOT库。你再次构建时,MAVEN会去远程仓库中下载SNAPSHOT的最新版本,此时你再次构建时用的就是最新的JAR文件,这时正确性就很难保证了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值