快照仓库行为
SNAPSHOT 版本依赖有特殊的下载和更新机制。
SNAPSHOT 版本特点
版本标识
XML
1.0.0-SNAPSHOT
2.0.0.BUILD-SNAPSHOT
特殊行为
| 特性 | 说明 |
|---|---|
| 不稳定 | 内容随时变化 |
| 定时更新 | 定期检查新版本 |
| 时间戳命名 | 实际存储带时间戳 |
快照仓库配置
仓库声明
XML
<repository>
<id>snapshots</id>
<url>https://repo.example.com/snapshots</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</snapshots>
</repository>
典型私服配置
Bash
<repository>
<id>nexus-snapshots</id>
<url>https://nexus.company.com/repository/maven-snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
updatePolicy 配置
| 值 | 说明 | 适用场景 |
|---|---|---|
| always | 每次构建检查 | 开发活跃期 |
| daily | 每日检查(默认) | 一般开发 |
| interval:X | 每 X 分钟检查 | 持续集成 |
| never | 不检查更新 | 稳定依赖 |
强制更新快照
XML
# 强制检查所有 SNAPSHOT 更新
mvn clean install -U
# 简写
mvn clean install --update-snapshots
-U 参数让 Maven 忽略本地缓存,重新检查远程 SNAPSHOT。
时间戳存储机制
本地仓库存储
XML
~/.m2/repository/com/example/my-lib/1.0.0-SNAPSHOT/
├── my-lib-1.0.0-20260523.140530-123.jar
├── my-lib-1.0.0-20260523.140530-123.pom
├── maven-metadata.xml
├── maven-metadata-nexus.xml
└── resolver-status.properties
maven-metadata.xml
XML
<metadata>
<groupId>com.example</groupId>
<artifactId>my-lib</artifactId>
<version>1.0.0-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20260523.140530</timestamp>
<buildNumber>123</buildNumber>
</snapshot>
<lastUpdated>20260523140530</lastUpdated>
</versioning>
</metadata>
SNAPSHOT vs RELEASE 仓库
仓库分离
Bash
<!-- 正式版仓库 -->
<repository>
<id>releases</id>
<url>https://nexus.company.com/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<!-- 快照版仓库 -->
<repository>
<id>snapshots</id>
<url>https://nexus.company.com/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
行为对比
| 特性 | SNAPSHOT | RELEASE |
|---|---|---|
| 更新检查 | 定期检查 | 不检查 |
| 本地缓存 | 可能过期 | 稳定不变 |
| 下载频率 | 按策略更新 | 仅首次 |
| 稳定性 | 不稳定 | 稳定 |
发布 SNAPSHOT
XML
<distributionManagement>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>https://nexus.company.com/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
Bash
mvn deploy
清理过期快照
配置清理策略
text
<repository>
<id>snapshots</id>
<snapshots>
<enabled>true</enabled>
<!-- Nexus 端配置清理策略 -->
</snapshots>
</repository>
手动清理本地快照
text
rm -rf ~/.m2/repository/com/example/my-lib/1.0.0-SNAPSHOT
mvn clean install -U
要点总结
- SNAPSHOT 版本不稳定,内容随时变化
- 默认每日检查更新(daily)
- -U 强制检查更新
- 时间戳命名:版本-时间戳-构建号
- 快照和正式版仓库通常分离
- 不建议在生产环境使用 SNAPSHOT 依赖
📝 发现内容有误?点击此处直接编辑