理解软件版本标识含义与版本号语义

简介

了解软件的版本标识含义、版本号语义,才能帮我们更好的选择软件版本,处理依赖等。

例如,软件包gradle-9.2.0-rc-3-bin.zip中的rc代表什么意思?

例如,项目中有下面的依赖,我们怎么处理呢?从哪里开始着手分析呢?

  1. 我们项目->A->Z@1.4.2
  2. 我们项目->B->Z@1.7.8
  3. 我们项目->C->Z@2.1.0
  4. 我们项目->D->E->Z@1.9.3

通常Maven、Gradle这类构建工具会帮我们自动处理依赖问题。

Maven会采用最短路径原则,Gradle会采用最高版本原则。

但是,当项目复杂之后,很容易就冲突了,还是需要我们手动去处理。

相信很多做前端的朋友深有体会,为什么我只是简单的加入了一个依赖,我的npm就不对了?

理解了版本号的语义,我们就能更好的处理这些问题。

例如,上面我们提的依赖问题,如果知道版本号的语义,我们就会首先去解决C的版本依赖,因为它依赖的Z的主版本major是2,和其他包依赖的1.x.z是API不兼容的。

如果,我们自己要发布开源软件,了解版本号语义就更重要了,例如,我们软件版本1.2.3,做了一个不兼容升级,版本号修改为1.2.4,如果别人使用了npm ^1.2.3类似的版本,自动拉取了1.2.4的包,然后版本不兼容,不就玩死别人了。

软件版本标识含义

Alpha(α)

预览版,也叫内部测试版,一般不向外部发布,会有很多Bug,主要是内部人员用于测试。

很多开源软件的大版本也会释放出来,让大家一起来找茬。

例如:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.0-alpha1</version>
</dependency>

Beta(β)

测试版,也叫公开测试版,在 Alpha版之后推出。我们基本不会不会看到Alpha版本,但是很多开源软件会在其官网提供Beta版本。

同样是log4j-api的2.0版本释放了9个Beta版本:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.0-beta9</version>
</dependency>

RC(Release Candidate)

最终测试版本,最终产品的候选版本,从名字也能看出来,是Release的候选者,如果没有发现新的Bug则发布成为正式版本。

多数开源软件会推出两个RC版本,最后的 RC2 则成为正式版本,例如,log4j-2.15.0-rc2最后就变成了正式的log4j-2.15.0版本。

当然rc不一定都对只有2个版本,例如:

<dependency>
    <groupId>org.gradle</groupId>
    <artifactId>gradle-core</artifactId>
    <version>7.3-rc-5</version>
    <scope>provided</scope>
</dependency>

Stable

稳定版,来自预览版本释出使用与改善而修正完成。

如Nginx就会有:

  1. Mainline version:Mainline 是 Nginx 目前正在做的版本
  2. Stable version:最新稳定版,生产环境上建议使用的版本
  3. Legacy versions:遗留的老版本的稳定版

NGINX下载

GA(General Availability)

正式发布的版本,如:

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.28.0-GA</version>
</dependency>

Milestone

通常文件名中包含有milestone或者m1、m2、m3等的版本就是里程碑版本,通常是软件既有重大意义的版本。

Latest

Latest表示最近最新版本

版本号说明

规范的项目的软件版本号分3段:主版本号.次版本号.修订号(MAJOR.MINOR.PATCH)

  1. 主版本号(major):做了不兼容的 API 修改
  2. 次版本号(minor):做了向下兼容的功能性新增
  3. 修订号(patch):做了向下兼容的问题修正,只要有修改就增加

我们以npm的版本号规则为例来说明:

版本符号含义版本说明
^兼容版本使用兼容版本的最新版本,major大于0锁定major:1.x.y,major等于0锁定minor:0.1.x
~锁定major和minor版本,相当于只更新问题修复的版本~1.4.2就相当于1.4.x版本
>大于>4.1.0,只能使用大于4.1.0的版本,相当于版本兜底,意味着自己只兼容4.1.0以上的api
<小于< 3.0.0,版本上限,通常指定主版本,因为主版本不一样,api不兼容
*任意版本1.x / *

注意:肯定会使用最新版本,例如我们配置1.1.0,最开始当只有1.1.0的时候使用的是1.1.0,当包有新版本1.1.1的时候,npm会自动升级使用1.1.1。

为什么可以这么操作呢?

因为^可以保证主版本不变,也就意味着包不会有不兼容的API修改。

还有一点需要注意的是当主版本major为0的时候,^锁定的是次版本minor,因为major为0说明软件本身就还是不稳定的状态。

版本号规范

版本号规范中文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值