如果我还想发布 alpha、beta 和 rc,我应该在开发期间在 Maven 项目中使用哪个版本?

Posted

技术标签:

【中文标题】如果我还想发布 alpha、beta 和 rc,我应该在开发期间在 Maven 项目中使用哪个版本?【英文标题】:Which version should I use in a Maven project during development if I want to release alphas, betas, and rc's as well? 【发布时间】:2014-03-04 12:28:56 【问题描述】:

背景

在过去的几个月里,我一直在使用 Maven 构建的 Java 项目。我的团队在一个(现在是 Mavenized)项目上工作,该项目有一个固定的发布周期,当项目包含我们想要在发布中的所有功能时,我们是否从我们的开发分支(在 git 中)分支,并进入内部测试阶段。解决错误后,我们将项目部署在验收环境中,在此环境中,我们的客户有机会在我们投入生产之前批准产品。

到目前为止,我们一直使用这个简单的版本控制方案:

在开发、测试、验收时,项目版本号为(例如)1.0.0-SNAPSHOT1.0.0-SNAPSHOT被分支出来进行测试时,主分支上的开发版本设置为下一个计划发布的版本(1.1.0-SNAPSHOT) 最终版本被标记并发布为版本1.0.0

分支模型(去除所有特征分支等)如下所示:

                      (release-1.0)
                   ╭─── 1.0.0-SNAPSHOT ── 1.0.0 ──╮
── 1.0.0-SNAPSHOT ─┴─────── 1.1.0-SNAPSHOT ───────┴── 1.1.0-SNAPSHOT ──
  (master)

这没关系,但是在验收期间将 Maven 快照部署为候选版本有点草率,并且在内部测试回合中发布 alpha 和 beta 非常好,因此可以提交(并因此复制)错误一个确切的版本。

现在版本号在分支模型中可能看起来有点像这样:

                    (release-1.0)
                 ╭─── 1.0.0-rc1-SNAPSHOT ── 1.0.0-rc1 ── 1.0.0-rc2-SNAPSHOT ── 1.0.0-rc2 ── 1.0.0 ──╮
── ???-SNAPSHOT ─┴─────────────────────────── ???-SNAPSHOT ─────────────────────────────────────────┴── ???-SNAPSHOT ──
  (master)

此外,在这些候选版本之前可能有也可能没有许多 alpha 和 beta 版本。

问题

现在我的问题是xxx-SNAPSHOT,用 Maven 的话来说,基本上是指将成为xxx的版本。但是,如果我们开始发布候选版本等,主分支在分支后成为的即将发布的版本不再是xxx-SNAPSHOT,因为虽然它在最终版本xxx之前排序,但它在xxx-rc1之后(和xxx-alpha1 )。

那么在这个模型中我的初始开发版本应该是什么?

我想出的一个可能的解决方案是在发布分支分裂后将 master 上的版本号设置为 xxx-alpha1-SNAPSHOT,但我想知道是否有某种我忽略的约定或最佳实践。

【问题讨论】:

【参考方案1】:

这是你在大多数JBoss projects上看到的:

1.0.0.Alpha[n]
1.0.0.Beta[n]
1.0.0.CR[n]
1.0.0.Final

【讨论】:

有趣。这将允许我使用 1.0.0-SNAPSHOT 开始一个新的开发周期,因为 1.0.0.Alpha1 位于 1.0.0 之后,将其视为 a,但它强制最终版本命名为 1.0.0.Final,并且偏离了我们使用的大多数依赖项命名其版本的方式。我偏爱semver.org 表示版本号的方法。【参考方案2】:

最后,我们选择将具有 alpha、beta 和候选发布版本的项目的第一个 SNAPSHOT 版本命名为 VERSION-alpha1-SNAPSHOT,其中 VERSION 是即将推出的版本。

因此,如果我们从 master 分支到最终发布 1.0.0,则 master 上的下一次提交会将版本设置为 1.1.0-alpha1-SNAPSHOT。这有点难看,但在我们的案例中是一个合适的解决方案,并且与大多数 Java 库中看到的版本命名约定保持接近。

对于更简单的项目,我们不使用 alpha、beta 和候选版本,因此不存在问题。

hwellmann 的回答也是一个不错的方法,如果你使用很多遵循 JBoss 命名版本方式的包,值得推荐。

【讨论】:

以上是关于如果我还想发布 alpha、beta 和 rc,我应该在开发期间在 Maven 项目中使用哪个版本?的主要内容,如果未能解决你的问题,请参考以下文章

alpha版beta版rc版的意思

软件alpha版、beta版、rc版是啥意思 软件版本介绍

名词解释:alpha版beta版rc版的意思(转)

各软件发布版本简写(Alpha Beta RC GA DMR)

RC 和 Beta认识

项目管理: Alpha,Beta,RC,GA,Release