1. 版本管理(version)

说了那么多废话,什么是版本管理?首先,一个健康的项目,通常有一个长期、合理的版本演变过程。版本管理是指项目整体版本的演变过程管理,就比如从1.0-SNAPSHOT --> 1.0 --> 1.1-SNAPSHOT演变。体现的是从开发快照版到稳定版,继续升级进入下一个版本的快照开发版的过程。(SNAPSHOT 叫快照版)

2. 版本号

2.1 版本号的组成

我们在引入其他依赖的时候,经常看到,比如1.2.1、1.7、1.0-SNAPSHOT、1.1-release、2.3-alpha等的 version。但它们的组成比较简单,如下,maven 的版本构成:

<主版本>.<次版本>.<增量版本> - <里程碑版本>

一般情况下,主版本和次版本会一直存在,增量版本和里程碑版本见到的相对少的多。

主版本: 表示项目的重大架构变化。如struts2和struts1采用不同的架构。

次版本: 较大范围功能增加和变化,及 bug 修复,并且不涉及到架构变化的。

增量版本:表示重大 bug 的修复,如果发现项目发布之后,出现影响功能的 bug,及时修复,则应该是增量版本的变化。

里程碑版本:往往表示某个版本的里程碑,经常见到snapshot,另外还有alpha、beta,比如:1.0-SNAPSHOT、3.0-alpha-1、1.1.2-beta-2。

2.2 snapshot 介绍

通常在开发的阶段,你们会在 maven 项目的pom.xml里看到,当前项目的版本号后边带有SNAPSHOT, 那它代表什么意思呢?用于什么场景?

snapshot表示快照版,它不是个稳定版本,属于开发过程中使用的版本。当我们项目处于不停的迭代开发期,如果存在依赖关系,比如 A 项目组开发后发布的新包,被 B 项目组引用,这时候使用快照版本snapshot,能够在 A 项目组发布到仓库后,自动转为最新时间戳的后缀,供 B 项目组自动引用成功。

这样的好处是,当我们有依赖关系的两个项目组同时开发时,可以互不影响,每次 A 项目组发布后,B 项目组都会刷新、重新编译的方式,自动更新到最新的 A 项目开发的依赖包。只有当准备进入测试阶段,才会将里程碑版本号的SNAPSHOT替换成alpha或beta,即测试版本。

2.3 测试版本alpha、beta

当一个项目开发完成后,就会进入测试版本,而测试版本一般会分为内部测试 alpha版、外部测试 beta版两种。

alpha和beta区别就是beta版会向外公开,而alpha版不会。

alpha(α):预览版,或者叫内部测试版;一般不向外部发布,会有很多 Bug;一般只有测试人员使用。beta(β):测试版,或者叫公开测试版;这个阶段的版本会一直加入新的功能;在 Alpha 版之后推出。

因为处于测试阶段,肯定会有来回变的情况,那里程碑版本号的排序是怎么排的,它是按照字符串进行比较大小的, 就比如:1.3-alpha-2 >1.3-alpha-10。

下边有几个扩展,如下: 扩展一:

α、β、λ 常用来表示软件测试过程中的三个阶段。

-- α(alpha) 是第一阶段,一般只供内部测试使用;

-- β(beta)是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存

在缺陷和漏洞,一般只提供给特定的用户群来测试使用;

-- λ(lambda)是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的

优化处理即可上市发行。

扩展二:

软件开发版本分类描述

Alpha:软件或系统的内部测试版本,会有很多Bug,仅内部人员使用

Beta:软件或系统的测试版本,这一版本通常是在Alpha版本后,会有很多新功能,同时也有不少Bug

Gamma:软件或系统接近于成熟的版本,只需要做一些小的改进就能发行

RC(Release Candidate):候选版本,这一版本不会增加新功能,多要进行Debug

GA(General Available):正式发布版本,这个版本就是正式的版本

一个介绍的好文章地址: 软件的 Alpha、Beta、GM、RC、GA 等版本到底是啥意思 https://www.bilibili.com/read/cv9270313

2.4 rc、final、stable、release、GA稳定版

当测试通过后,将会进入正式版本,正式版本很多都不一样,但是大概就这几种。大部分的正式版是啥也不带,就一个单纯的版本号,比如1.0、1.7.1等。也有个别的是这些 rc、final、stable、release、GA等。    正式版本就是稳定版,它在当期内是不会再变化了,表示测试通过,可以对外发布的版本。    正式版本也有排序,它的排序与里程碑版本号排序不同,正式版本就是以数字进行排序,比如1.10.1 > 1.7.1 > 1.5。

这里就需要提醒大家,一般我们下依赖,尽量不要下非稳定版本,像那种版本,基本都是有问题的,如果有稳定版,尽量用稳定版。

2.5 看下开源nacos的版本迭代情况

在学习版本号这块的时候,专门搜了下大厂的版本迭代情况,所以我就搜到了nacos这个。nacos 源码地址

3. maven指定版本号范围写法

org.projectlombok

lombok

1.18.8

上述代码是我们在使用maven依赖某一个jar包时最常见的写法,其中version指定了jar包的版本为1.18.8。但是在一些项目中我们可以看到如下写法:

org.projectlombok

lombok

[1.18.8,1.18.12]

version的位置变成了中括号加逗号的形式,那这样是什么意思呢?意思是在1.18.8-1.18.12的范围内的jar包都可以使用,默认使用最大版本的即1.18.12

完整的版本号范围说明如下:(x为具体使用的版本号)

(,1.0] x <= 1.0

[1.0] x = 1.0 跟直接指定1.0没有区别

[1.2,1.3] 1.2 <= x <= 1.3

[1.0,2.0) 1.0 <= x < 2.0

[1.5,) x >= 1.5

(,1.0],[1.2,) x <= 1.0 or x >= 1.2

(,1.1),(1.1,) x < 1.1 or x > 1.1 即排除1.1的版本

那么假如此时存在快照版本和非快照版本呢?默认情况下,同版本的快照版本会小于非快照版本。如:

[1.0-SNAPSHOT,1.0] 如果1.0不存在则使用1.0-SNAPSHOT,1.0存在则使用1.0版本

[1.0,1.0-SNAPSHOT] 错误,会提示:Reason: Range defies version ordering

文章来源

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。