SNAPSHOT 是什么
SNAPSHOT 是 Maven 的特殊版本语义,表示「开发中的快照版本」:同一坐标(groupId:artifactId:version)可以反复部署,仓库侧用时间戳与构建号区分每次实际内容,依赖方解析时会取仓库里最新的快照。它解决团队联调期「共享未发布代码」的需求,代价是内容可变、构建结果不可复现。
基本信息
| 适用平台 | Maven / Gradle 生态,配合 Nexus、Artifactory 等仓库 |
|---|---|
| 行为 | 部署时带时间戳版本;依赖解析默认取最新快照 |
| 更新策略 | settings 里配 updatePolicy;命令行用 -U 强制刷新 |
| 禁止项 | 正式交付依赖 SNAPSHOT:结果不可复现 |
典型使用场景
- 多团队联调:上游库未到发布节奏,先发快照供下游对接
- 主干持续集成:每次合入自动部署快照,测试随时取最新
- 发布预验证:正式发版前用快照给下游试装,发现问题改后再发
- 定向修复验证:给特定项目部署修复快照做针对性验证
- 内部工具库:变化频繁且仅内部使用的组件,快照降低发版负担
快照与发布流程
快照与发布流程
# 开发阶段:部署到快照仓库,自动带时间戳与构建号
mvn deploy # 版本 1.9.0-SNAPSHOT
# 消费方强制刷新快照依赖
mvn -U compile
# 发布阶段:改版本号后进发布仓库,坐标此后不可变
mvn versions:set -DnewVersion=1.9.0
mvn deploy快照与正式版对照
| 维度 | SNAPSHOT | 正式版 |
|---|---|---|
| 可部署次数 | 多次覆盖,带时间戳区分 | 一次,内容不可变 |
| 依赖解析 | 取仓库中最新快照 | 固定内容 |
| 适用阶段 | 开发与联调 | 交付与生产 |
快照仓库与发布仓库分离:让「可变的」停留在快照区,发布区保持不可变,审计与回滚才有依据。
快照更新策略要显式配置:本地默认可能一天才检查一次,CI 里习惯加 -U 强制刷新,避免拿到过期快照排查半天。
Gradle 生态里 -SNAPSHOT 语义一致:同一坐标可重复发布、消费端按缓存策略刷新,治理原则同样适用。