坐标与版本管理
Maven 坐标用于唯一定位构件,版本管理区分开发与发布阶段。
坐标组成
GAV 三要素
XML
<dependency>
<groupId>com.example</groupId> <!-- 组织标识 -->
<artifactId>my-app</artifactId> <!-- 项目名称 -->
<version>1.0.0</version> <!-- 版本号 -->
</dependency>
元素说明
| 元素 | 必填 | 说明 | 示例 |
|---|---|---|---|
| groupId | 是 | 组织/公司/项目组 | com.example、org.springframework |
| artifactId | 是 | 项目/模块名 | my-app、spring-core |
| version | 是 | 版本号 | 1.0.0、2.3.5.RELEASE |
完整坐标格式
XML
groupId:artifactId:version[:packaging][:classifier]
com.example:my-app:1.0.0:jar
org.springframework:spring-core:5.3.0
版本号规范
标准版本格式
XML
主版本.次版本.增量版本-里程碑版本
1.0.0
2.1.3-SNAPSHOT
3.0.0-RC1
版本号含义
| 部分 | 说明 | 变化时机 |
|---|---|---|
| 主版本 | 架构变更 | 不兼容的重大更新 |
| 次版本 | 功能增加 | 兼容的功能扩展 |
| 增量版本 | Bug修复 | 小修复、优化 |
| 里程碑 | 开发阶段 | SNAPSHOT、RC、GA |
SNAPSHOT 与 RELEASE
区别对比
| 特性 | SNAPSHOT | RELEASE |
|---|---|---|
| 状态 | 开发版 | 正式版 |
| 稳定性 | 不稳定,持续更新 | 稳定,不变 |
| 发布频率 | 随时更新 | 正式发布后固定 |
| 仓库 | 快照仓库 | 正式仓库 |
| 缓存 | 每次检查更新 | 本地缓存优先 |
SNAPSHOT 示例
Bash
<!-- 开发阶段使用 SNAPSHOT -->
<dependency>
<groupId>com.example</groupId>
<artifactId>my-lib</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
SNAPSHOT 版本每次构建都会检查远程仓库是否有更新。
RELEASE 示例
text
<!-- 正式版本使用 RELEASE -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
</dependency>
版本里程碑标识
| 标识 | 说明 |
|---|---|
| SNAPSHOT | 开发快照版,不稳定 |
| ALPHA | 内部测试版 |
| BETA | 公开测试版 |
| RC | Release Candidate,候选发布版 |
| GA | General Availability,正式发布版 |
| RELEASE | 正式发布版 |
版本冲突解决
决策规则
| 规则 | 说明 |
|---|---|
| 最短路径优先 | 依赖层级少的优先 |
| 声明顺序优先 | 同层级先声明优先 |
| 最近版本优先 | 距离项目最近的版本 |
查看依赖树
text
mvn dependency:tree
输出示例:
text
[INFO] com.example:my-app:jar:1.0.0
[INFO] +- org.springframework:spring-core:jar:5.3.0
[INFO] +- commons-logging:commons-logging:jar:1.2
要点总结
- GAV 坐标唯一标识构件:groupId、artifactId、version
- SNAPSHOT 用于开发阶段,RELEASE 用于正式发布
- 版本格式:主版本.次版本.增量版本-里程碑
- 使用 dependency:tree 查看依赖树定位冲突
📝 发现内容有误?点击此处直接编辑