言成言成啊 | Kit Chen's Blog

语义版本控制

发布于2024-11-27 22:25:05,更新于2024-11-27 23:29:28,标签:java semver  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

由于自己平时喜欢写点小玩意,自然而然的就碰到了许多志同道合的人。

大家都会将自己写的工具包发布到中央仓库,我也不例外。在对比中发现我的版本命名太过随便,因此特意学习一下常见的版本控制规范——语义化版本 2.0.0 | Semantic Versioning

一句话概括,版本格式为X.Y.Z

  • X: 主版本号。主版本号变更,表示你做了不兼容的API修改
  • Y: 次版本号。次版本号变更,表示你做了向下兼容的功能性新增
  • Z: 修订号。修订号变更,表示你做了向下兼容的问题修正

重要规范如下

最新和更详细的说明还是自行查阅语义化版本 2.0.0 | Semantic Versioning

  1. 必须定义公共API
  2. 必须采用X.Y.Z的格式,且X、Y、Z为非负的整数。版本更新时,要根据实际情况,进行数值递增
  3. 一旦版本发行后,禁止修改版本内容
  4. 主版本号为0(0.Y.Z)的程序,处于开发初始阶段,这样的公共API可能会存在变化
  5. 先行版本号命名规范示例: 1.2.1-alpha.1、1.2.1-alpha.2
  6. 在语义版本前面加v是一种git常见标签的命名方式。

语义版本的在线正则校验工具

下面给出Java的示例工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Semantic Versioning
*
* @author <a href="https://meethigher.top">chenchuancheng</a>
* @see <a href="https://semver.org/">Semantic Versioning 2.0.0 | Semantic Versioning</a>
* @since 2024/11/27 23:07
*/
public class SemVer {

/**
* 语义版本的正则格式
*/
private static final String SEMVER_PATTERN = "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$";

/**
* @param semVer 语义版本号
* @return true表示输入值符合语义版本的规范
*/
public static boolean isValidSemVer(String semVer) {
if (semVer == null || semVer.isEmpty()) {
return false;
}
return semVer.matches(SEMVER_PATTERN);
}

}
发布:2024-11-27 22:25:05
修改:2024-11-27 23:29:28
链接:https://meethigher.top/blog/2024/semantic-versioning/
标签:java semver 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏