先简单介绍一下maven中的Snapshot,maven的依赖管理方式中将依赖分为两种版本,一种是Release正式版本,还有一种Snapshot快照版本。一般版本号后面带有Release或者什么都没有的就是正式版本,而版本号后面带有snapshot的则是快照版本,如图:
maven对这两种版本的依赖管理方式是不同的。如果是一个正式版本的依赖,maven在构建工程的时候会先检查本地仓库有没有这个依赖,没有的话就去远程仓库拉取。因为是优先从本地仓库找,所以如果对该依赖做了迭代更新,需要重新发布一个正式版本,所以正是版本的依赖一般是一个稳定的版本。然而如果组间开发引用的其他组的依赖一直在频繁迭代更新,这就不能一直发正式版本了,这个时候Snapshot快照版本就上场了。如果依赖的是一个快照版本,maven在构建工程的时候会优先检查远程仓库中的该快照版本是否有更新,如果有更新的话就下载到本地,这样就不用一直发版本了。
有的人可能会觉得这样不就不能充分利用本地仓库的缓存机制了吗?其实在配置Maven的Repository的时候中有个配置项,可以配置对于SNAPSHOT版本向远程仓库中查找的频率。频率共有四种,分别是always、daily、interval、never。当本地仓库中存在需要的依赖项目时,always是每次都去远程仓库查看是否有更新,daily是只在第一次的时候查看是否有更新,当天的其它时候则不会查看;interval允许设置一个分钟为单位的间隔时间,在这个间隔时间内只会去远程仓库中查找一次,never是不会去远程仓库中查找,这种就和正式版本的行为一样了。
但是maven默认是不开启Snapshot版本拉取的,需要配置开启。
可以在pom.xml中配置项目级的:
<repositories>
<repository>
<id>nexus</id>
<url>http://192.168.1.221:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
也可以在settings.xml中配置全局级的:
<profiles>
<profile>
<id>roncoo-profile</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://192.168.1.221:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>roncoo-profile</activeProfile>
</activeProfiles>