maven的snapshot快照版本通过“-snapshot”后缀标识,依赖maven-metadata.xml按时间戳自动更新最新构建,支持开发阶段高频迭代;而release版本不可覆盖、内容固定,生产环境必须使用。

当你在团队协作中频繁修改模块、又不想每次改个bug就升一次版本号,Maven的SNAPSHOT快照版本就能让依赖自动拉取最新代码,避免手动更新、版本错乱和构建失败。
为什么必须用-SNAPSHOT后缀
在pom.xml的1.0.0-SNAPSHOT,Maven才会识别这是快照版本。不加这个后缀,哪怕你本地install了十次,其他项目引用时依然只会锁定第一次下载的jar,后续变更完全不可见。
这一步是开关——【没有-SNAPSHOT,整个快照机制彻底失效】。
注意:-SNAPSHOT必须全大写,写成-snapshot或-SnapShot都不生效。
快照如何做到“自动更新”
Maven不是靠猜,而是靠远程仓库里的maven-metadata.xml文件来判断哪个快照最新。该文件由deploy过程自动生成并上传,里面记录了所有带时间戳的构建版本,例如:1.0.0-20260804.152311-7.jar。
每次执行mvn compile或mvn package时,只要本地仓库中该快照的元数据过期(默认每24小时检查一次),Maven就会重新请求远程仓库的maven-metadata.xml,再比对时间戳,自动下载编号最大的那个构建产物。
方法一:强制立即检查最新快照 → 运行mvn clean compile -U(-U参数即--update-snapshots)。
方法二:永久启用高频检查 → 在settings.xml的<repository></repository>配置块中加入:<updatepolicy>always</updatepolicy>。
部署快照到远程仓库的完整路径
第一步:确认pom.xml中distributionManagement已配置快照仓库地址,且URL以/snapshots/结尾;
第二步:确保settings.xml中对应server的id与pom中<id>xxx</id>一致,并填好用户名密码;
第三步:执行mvn deploy → Maven自动识别-SNAPSHOT → 将jar、pom、sha1校验文件及maven-metadata.xml全部推送到远程快照库;
第四步:其他项目执行mvn compile时,只要本地缓存过期,就会从该远程快照库拉取最新构建。
快照与Release的根本区别
快照仓库允许同版本多次覆盖上传,Release仓库严禁覆盖——这是Maven仓库的硬性规则。一旦你在pom中写了1.0.0(无-SNAPSHOT),Nexus或Artifactory会拒绝第二次deploy相同版本号的包。
生产环境绝对禁止依赖-SNAPSHOT版本,因为它的内容随时可能变更,且无法回滚到某个确定状态;而Release版本一旦发布,内容永久固定,具备可重现性和审计依据。
开发阶段用SNAPSHOT,交付前必须切换为Release版本——这是上线前的强制动作。











