今天遇到一个问题,最近在写一个通道只是提供能力的一个服务,给别的服务通过pom坐标的形式进行依赖,当我们修改了这里面的代码后推到仓库里面,那么依赖的服务重新部署怎么知道他依赖的包发生了改变要重新拉取进行编译呢,这里就说到了两个关键字SNAPSHOT和RELEASE
SNAPSHOT
我们都知道确定一个jar包是通过groupId和artifactId和version来定位,这时候如果版本号没改变,但是改变了代码,那么依赖该坐标的服务没办法识别到其进行了修改,所以我们通过在版本号上面添加关键字SNAPSHOT来向依赖该坐标的服务说明当前坐标是会发生改变的要去拉取最新的jar包不可以使用本地缓存的jar,这样即使版本号不变通过关键字也可以做到动态的去拉取最细的代码
<groupId>springbootParent</groupId>
<artifactId>mySpringbootParent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
RELEASE
有的时候我们的服务是部署在正式环境,只要有一点修改都需要发版本和打tag,那么就需要用到RELEASE这个关键字是不允许修改的,如果修改必须要修改版本号,这里简单来说就是如果我们的正式包依赖了三方仓库的一个1.0-SNAPSHOT版本的包,如果我们不使用RELEASE的话如果三方对该1.0-SNAPSHOT的包进行了修改且推到了仓库那么我们的正式服务就会实时的去到对方仓库拉到最新的代码可能会引发报错,而使用了RELEASE就会先判断本次仓库是否有这个包,如果有就是用本地的如果没有采取拉
<groupId>springbootParent</groupId>
<artifactId>mySpringbootParent</artifactId>
<packaging>pom</packaging>
<version>1.0-RELEASE</version>
有时候会遇到我们明明用的是snapshot但是打包的时候并没有去拉取最新的snapshot包,这其实在pom里面有一个配置可以去控制一下,我们可以去到依赖其他snapshot包的微服务pom里面的repository标签里面添加一下配置
<repositories>
<repository>
<id>定义的id</id>
<name>定义的名字</name>
<url>公共服务的仓库地址</url>
<!--下面的snapshots和releases的意思是是否从上面的中央仓库下载
稳定版本和snapshot版本的jar包-->
<snapshots>
<enabled>true</enabled>
<!--每次打包都回去拉取最新的snapshots包-->
<updatePolicy>always</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
这里做一下说明,关于仓库有几个比较重要的概念:本地仓库,中央仓库,远程仓库分别对着三个做一下解释
-
本地仓库:本地仓库就是我们电脑本地maven的仓库地址,一般在idea的setting里面搜索maven就可以配置见图:
-
中央仓库:这个就是我们在pom里面配置的repository这个就是中央仓库,这个标签里面有snapshots和releases两个标签用于说明releases和snapshot两种类型包是否从中央仓库拉取
-
远程仓库:这个就是我们在setting里面mirrors配置的地址
最后说一下这三个仓库的优先级: 本地仓库 > 中央仓库 > 远程仓库