1. Maven私库(私服)
定义
-
私有仓库,企业内部搭建的Maven仓库
-
用于存储和管理企业内部的二方包和第三方依赖
作用
text
中央仓库(公网)
↓
Maven私库(内网) ←─→ 开发团队
↓
项目构建
-
加速构建:缓存中央仓库依赖,减少外网下载
-
隔离性:企业内部代码不上传到公共仓库
-
统一管理:企业内所有项目的依赖统一版本管理
-
发布平台:二方包发布和分发的平台
2. 二方包 Release 版本
特点
-
版本号固定 :如
1.0.0、2.1.3 -
稳定性高:经过测试的正式版本
-
不可修改:一旦发布到私库,内容不可更改
-
发布流程严格:通常需要代码评审、测试等流程
Maven坐标示例
xml
<dependency>
<groupId>com.company</groupId>
<artifactId>common-utils</artifactId>
<version>1.2.0</version>
</dependency>
发布到私库
bash
mvn clean deploy -Dmaven.test.skip=true
3. 二方包 Snapshot 版本
特点
-
版本号带 SNAPSHOT 后缀 :如
1.0.0-SNAPSHOT -
开发中版本:不稳定,还在开发阶段
-
可覆盖:同一版本可多次部署,覆盖旧版本
-
自动更新:Maven会定期检查更新(默认每天)
Maven坐标示例
xml
<dependency>
<groupId>com.company</groupId>
<artifactId>common-utils</artifactId>
<version>1.2.0-SNAPSHOT</version>
</dependency>
更新机制
bash
# 强制更新SNAPSHOT依赖
mvn clean install -U
4. 三者的核心区别对比
| 特性 | Snapshot版本 | Release版本 | Maven私库 |
|---|---|---|---|
| 版本命名 | 带-SNAPSHOT后缀 |
纯数字版本号 | 仓库概念,无版本 |
| 稳定性 | 开发中,不稳定 | 稳定,经过测试 | 基础设施 |
| 可覆盖性 | ✅ 可覆盖部署 | ❌ 不可覆盖 | 存储介质 |
| 更新策略 | 定期检查更新 | 除非手动升级,否则不变 | 版本管理平台 |
| 使用场景 | 联调、持续集成 | 正式环境、生产发布 | 所有版本存储 |
| 部署频率 | 频繁,每次提交都可部署 | 按发布周期 | 持续接收 |
| 时间戳 | 带时间戳,如1.0-20240126.102030-1 |
无时间戳 | 记录所有版本 |
5. 实际工作流程示例
开发阶段
发布阶段
版本演进示例
text
1.0.0-SNAPSHOT → 1.0.0 → 1.0.1-SNAPSHOT → 1.0.1
↑ ↑ ↑
开发阶段 发布版本 修复bug开发
6. 配置示例
pom.xml 中的发布配置
xml
<distributionManagement>
<!-- Release版本仓库 -->
<repository>
<id>company-releases</id>
<url>http://nexus.company.com/repository/maven-releases/</url>
</repository>
<!-- Snapshot版本仓库 -->
<snapshotRepository>
<id>company-snapshots</id>
<url>http://nexus.company.com/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
私库镜像配置(settings.xml)
xml
<mirrors>
<mirror>
<id>company-nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://nexus.company.com/repository/maven-public/</url>
</mirror>
</mirrors>
7. 最佳实践
-
开发期用SNAPSHOT:团队内部联调使用SNAPSHOT版本
-
发布用Release:上线前必须切换为Release版本
-
版本管理规范:
-
主版本.次版本.修订版本
-
如:
2.1.3(2是大版本,1是功能版本,3是bug修复)
-
-
私库管理:
-
定期清理旧的SNAPSHOT版本
-
Release版本永久保留
-
设置权限控制
-
总结
-
私库是基础设施,提供存储和管理能力
-
Snapshot是开发中的"活"版本,用于持续集成
-
Release是稳定的"死"版本,用于生产环境
-
三者共同构成了企业级Maven依赖管理的完整体系