如果我还想发布 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-SNAPSHOT
当1.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 项目中使用哪个版本?的主要内容,如果未能解决你的问题,请参考以下文章