Maven快照(SNAPSHOT)版本介绍

Maven 中,任何一个项目和构件都必须有自己的版本。版本的值可能是 1.0.0、1.0-alpha-4、1.3-SNAPSHOT 等,其中 1.0.0、1.0-alpha-4 是稳定的发布版本,而 1.3-SNAPSHOT 为不稳定的快照版本。

Maven 为什么要添加一个快照版本的控制呢?

假设张三在开发用户管理模块的 1.1 版本,该版本还没有正式发布。以前的用户管理模块和权限管理模块是由李四在单独开发的。其中,权限管理模块的功能是依赖用户管理模块的。

在开发过程中,张三经常要将最新的用户管理模块构建输出,交给李四,让他对权限管理模块进行开发集成和调试。这种问题,如果由用户自己手动控制的话,相对比较麻烦。但 Maven 基于快照机制,就能自动解决这个问题。

基于 Maven 的快照机制,张三只需将用户管理模块的版本设置成 1.1-SNAPSHOT,然后发布到私服中。

在发布过程中,Maven 会自动为构件打上时间戳,比如 1.1-20161211.111111-11,表示 2016 年 12 月 11 日 11 点 11 分 11 秒的第 11 次的快照。有了这个时间戳,Maven 就能随时找到仓库中用户管理构件 1.1-SNAPSHOT 版本的最新文件。

这时,李四配置对用户管理模块的 1.1-SNAPSHOT 版本的依赖,当他构建权限管理模块的时候,Maven 会自动从仓库中检测用户管理 1.1-SNAPSHOT 的最新构件,发现最新构件后就自动下载。

Maven 默认情况下,每天检测一次(具体实际情况,由参考配置的 updatePolicy 控制),当然,也可以使用 mvn-U 强制让 Maven 检测更新。如 mvn clean install-U。

基于这样的机制,张三在构建成功后,将构件发布到仓库,李四可以完全考虑用户管理模块的构件,并且他还能确保随时得到用户管理模块的最新可用的快照构件,这些所有的一切都由 Maven 自动完成。

快照版本只应该在开发团队内部的项目或模块之间依赖使用。这个时候,团队成员对这些快照版本的依赖具有完全的理解和控制权利。

项目不应该依赖任何团队外部的快照版本依赖。由于快照版本的不稳定性,这样的依赖会造成潜在的危险。也就是说,即使项目构建这次成功了,由于外部的快照版本依赖会随时间改变而再次更新,下次构建的时候有可能会失败。