Maven的快照版本机制就是为了解决多项目依赖开发存在频繁更改maven依赖版本的问题。比如模块B依赖模块A,只需要将模块A的版本设定为0.0.1-SNAPSHOT,然后发布到私服中,在发布的过程中,Maven会自动为构件打上时间戳。比如0.0.1-20191214.221414-13就表示2019年12月14日22点14分14秒的第13次快照。有了该时间戳,Maven就能随时找到仓库中该构件0.0.1-SNAP-SHOT版本最新的文件。这时,模块B配置对于模块A的0.0.1-SNAPSHOT版本的依赖,当构建模块B的时候,Maven会自动从仓库中检查模块A的0.0.1-SNAPSHOT的最新构件,当发现有更新时便进行下载。默认情况下,Maven每天检查一次更新(由仓库配置的updatePolicy控制)
,用户也可以使用命令行-U参数强制让Maven检查更新,如mvn clean install-U。
<snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </snapshots> 元素updatePolicy用来配置Maven从远程仓库检查更新的频率,默认的值是daily,表示Maven每天检查一次。其他可用的值包括:never——从不检查更新;always——每次构建都检查更新;in-terval:X——每隔X分钟检查一次更新(X为任意整数)。 元素checksumPolicy用来配置Maven检查检验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的校验和文件。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,怎么办?当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息,其他可用的值包括:fail——Maven遇到校验和错误就让构建失败;ignore——使Maven完全忽略校验和错误。
基于快照版本机制,模块A在构建成功之后才能将构件部署至仓库,而模块B可以完全不用考虑模块A的构建,并且模块B能确保随时得到模块A的最新可用的快照构件,而这一切都不需要额外的手工操作。
当项目经过完善的测试后需要发布的时候,就应该将快照版本更改为发布版本。例如,将0.0.1-SNAPSHOT更改为0.0.1,表示该版本已经稳定,且只对应了唯一的构件。相比之下,0.0.1-SNAPSHOT往往对应了大量的带有不同时间戳的构件,这也决定了其不稳定性。
快照版本只应该在组织内部的项目或模块间依赖使用,因为这时,组织对于这些快照版本的依赖具有完全的理解及控制权。项目不应该依赖于任何组织外部的快照版本依赖,由于快照版本的不稳定性,这样的依赖会造成潜在的危险。也就是说,即使项目构建今天是成功的,由于外部的快照版本依赖实际对应的构件随时可能变化,项目的构建就可能由于这些外部的不受控制的因素而失败。
原文地址:https://www.cnblogs.com/756623607-zhang/p/12182379.html