疑惑
我们在开发中经常会看到maven的pom文件里有如下两种版本形式:
<version>xxx-SNAPSHOT</version>和<version>xxx</version>
这其实分别描述的是快照版和正式版。
为什么要这么区分
因为maven的远程仓库一般分为public(Release)仓和SNAPSHOT仓,前者存放正式版本,后者存放快照版本。
开发案例<version>xxx</version>
此时,假设你现在正在开发一个订单模块,打完包发布到公司管理的远程仓库:java-order-1.0.0.jar,你隔壁组的开发小明需要依赖你这个包,那么他们就会按照maven的配置规则配置好artifactId、groupId和version。这样就通过maven直接从远程仓库里把java-order-1.0.0.jar下载到了本地。
某一天,你order模块新增了需求,于是你改了很多的代码,然后照样打包发布到了远程仓库,包名还是java-order-1.0.0.jar。此时,小明一直刷新maven仓库,可就是获取不到你最新的修改。
原因:你虽然更改了代码并发布到了远程仓库,但是小明那边本地仓库会去跟远程比对,发现包名是同一个,这时不会再去下载最新代码,而是使用原来的本地的。
假设你现在想让小明下载到你最新的代码,你可以将jar版本升级,比如:java-order-1.0.1.jar,这时小明本地仓库发现远程的jar有更新就会下载更新以后的版本。虽然这样可以解决问题,但是如果你修改很频繁,那么每次修改你都要升级一个版本,这样显得很麻烦。
<version>xxx-SNAPSHOT</version>好处
此时,如果你使用<version>xxx-SNAPSHOT</version>,那么你一有更新发布,小明那里都是可以直接下载到最新jar包的,这样你就不用频繁的对jar包进行升级了。
如果你确定这个版本已经稳定了,那么你再将SNAPSHOT去掉,然后发布稳定版java-order-1.0.0.jar。