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>

maven中的snapshot

4.相关