Maven中的snapshot到底是个啥,有啥作用 ,snapshot 即 快照 的意思
1.Maven中的Snapshot 概念
意思是,在1.0版本(或任何其他版本)发布之前,存在一个1.0-SNAPSHOT。这个版本可能会变成1.0。它相当于是“1.0正在开发中”。可能只是接近于真正的1.0版本。它是项目在持续开发过程中状态的“快照”。
“real”版本和快照版本的区别在于快照可能会得到更新。这意味着你今天下载了1.0-SNAPSHOT得到的可能与昨天或明天不同的文件。通常,快照依赖关系只应在开发过程中存在,任何已发布版本(即无非快照)都不应依赖快照版本。
快照不一定更稳定,它只是最新的版本。实际上,快照的版本号通常不指分支。可以拥有“master SNAPSHOT”,然后发布1.0版本。它不是最终版本,它是对可变版本的引用,不能依赖它来生成可被引用的构建。
当您构建应用程序时,Maven将在本地仓库库中搜索依赖项。如果在本地仓库找不到稳定版本,它将搜索远程存储库(在settings.xml或pom.xml中定义)以检索此依赖关系。然后,它会将其复制到本地存储库中,以便在下一个版本中使用。
2.使用
例如,foo-1.0.jar库被认为是一个稳定版本,如果Maven在本地仓库中找到它,它将在当前版本中使用这个库。
如果您需要一个foo-1.0-SNAPSHOT.jar库,Maven将知道这个版本不稳定,可能会发生变化。这就是为什么Maven会尝试在远程存储库中查找更新版本的原因,即使在本地存储库中找到了该库的版本。但是,该检查每天只进行一次。这意味着,如果您在本地存储库中有一个foo-1.0-20210506.110000-1.jar(即,此库已于2021/05/06 11:00:00生成),并且如果您在同一天再次运行Maven构建,Maven将不会检查存储库中的更新版本。
Maven为您提供了一种在存储库定义中更改此更新策略的方法
<repository> <id>foo-repository</id> <url>...</url> <snapshots> <enabled>true</enabled> <updatePolicy>XXX</updatePolicy> </snapshots> </repository>
XXX参数
always Maven将检查每个构建的更新版本;
daily 默认值
interval:XXX 以分钟为单位的间隔(XXX)
never 只要本地存在Maven缓存,maven就不会检索其他版本
通过配置,SNAPSHOT
版本将作为稳定库处理。可以使用命令行强制maven重新下载所有SNAPSHOT
版本
$ mvn clean package -U
3.快照发布
“SNAPSHOT”一词意味着构建是给定时间内代码的快照。这通常意味着该版本仍在大量开发中。当代码准备好,发布时,您将需要更改POM中的版本,可以使用类似“1.0”的标签,代替“1.0-SNAPSHOT”。
如果您的项目有“1.0-SNAPSHOT”版本,并且您将此项目部署到Maven存储库中,如果您要在2022年2月7日UTC时间23:08部署版本,Maven会将此版本扩展到“1.0-20080207-230803-1”。换句话说,当您部署快照时,不是在发布项目,而是在特定时间发布项目的快照。
当你依赖一个快照时,如下,将始终下载spring的1.8最新的开发(快照)JAR包
<dependency> <groupId>org.springframewor</groupId> <artifactId>spring</artifactId> <version>1.8-SNAPSHOT”</version> </dependency>