关于语义化版本(semantic versioning or SemVer)

1  为什么要有SemVer?

SemVer用来规范组件之间的依赖版本,它使用一个版本号来传递出组件的API的变化情况。

在理解这规范之后,看一眼依赖包的版本号,就知道API的变化(兼容性)程度,方便了依赖管理,避免了依赖混乱带来的问题。

(降低大工程的复杂度-->组件化-->明确API兼容性(稳定性))

2  规范的内容是怎样的?

  首先是版本号的组成形式,然后是这个形式对应的版本兼容性(API Compatibility)含义,最后是不同版本号之间的

优先层级(version precedence)比较。

2.1  组成格式:

  [主].[次].[修订]-[先行]+[编译元数据]

(主:major      次:minor     修订:patch     先行:pre-release(预发布)      编译元数据:build metadata)

  在字符使用上,主,次,修订版本号都是使用(非0开头)数字

先行版本号和编译元数据使用数字和英文字母以及连字符,即[0-9A-Za-z-],格式上可有多段由句点连接起来。

例子:

1.0.0-beta+exp.sha.5114f85

主版本号:1,次版本号:0,修订号:0;先行号:beta,编译元数据:exp.sha.5114f85

2.2 不同版本号的含义

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增
  3. 修订号:当你做了向下兼容的问题修正
  4. 先行号:可能不稳定,不满足兼容性的临时版本,
  5. 编译元数据:只是标识编译版本。

2.3 优先层级

  优先层级是指不同版本号如何排序。具体是:依次比较主版本号,次版本号,修订号以及先行号,

先比较的号码有结果就不再比较后续号码。此外,先行号从左到右按照句点分开逐个比较。最后,

编译元数据不影响版本号的优先层级。

范例:

  1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0

上一篇:Spring IOC 源码简单分析 01 - BeanFactory


下一篇:Spring系列(三):Spring IoC源码解析