先简单介绍一下maven中的Snapshot,maven的依赖管理方式中将依赖分为两种版本,一种是Release正式版本,还有一种Snapshot快照版本。一般版本号后面带有Release或者什么都没有的就是正式版本,而版本号后面带有snapshot的则是快照版本,如图:

android 开发 使用 maven 快照版本 maven快照包下不下来_xml

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>