有一些很棒的讨论和建议如何处理 maven 版本号和持续交付(CD)(我将在我的部分答案之后添加它们)。
所以首先我对 SNAPSHOT 版本的看法。在maven中的一个SNAPSHOT显示这个目前正在开发到SNAPSHOT后缀之前的特定版本。因此,Nexus 或 maven-release-plugin 等工具对 SNAPSHOTS 进行了特殊处理。对于 Nexus,它们存储在单独的存储库中,并且允许使用相同的 SNAPSHOT 发布版本更新多个工件。所以一个 SNAPSHOT 可以在你不知道的情况下改变(因为你永远不会在你的 pom 中增加任何数字)。因此,我不建议在项目中使用 SNAPSHOT 依赖项,尤其是在 CD 世界中,因为构建不再可靠。
由于上述原因,当您的项目被其他项目使用时,SNAPSHOT 作为项目版本会出现问题。
对我来说 SNAPSHOT 的另一个问题是它不再是真正可追溯或可重现的。当我在生产中看到 0.0.1-SNAPSHOT 版本时,我需要进行一些搜索以找出它是从哪个版本构建的。当我在文件系统上找到该软件的发行版时,我需要查看 pom.properties 或 MANIFEST 文件,看看这是旧垃圾还是最新最好的版本。
为了避免手动更改版本号(尤其是当您一天构建多个构建时),让构建服务器为您更改版本号。所以为了发展,我会选择
<major>.<minor>-SNAPSHOT
版本,但在构建新版本时,构建服务器可以用更独特和可追溯的东西替换 SNAPSHOT。
例如其中之一:
<major>.<minor>-b<buildNumber>
<major>.<minor>-r<scmNumber>
因此,主要和次要数字可以用于营销问题,或者只是表明达到了一个新的重要里程碑,并且可以在您需要时手动更改。buildNumber(来自您的持续集成服务器的编号)或 scmNumber(Subversion 或 GIT 的修订版)使每个版本都独一无二且可追溯。使用 buildNumber 或 Subversion 修订版时,项目版本甚至是可排序的(不使用 GIT 编号)。使用 buildNumber 或 scmNumber 也很容易查看此版本中的更改。
另一个例子是stackoverflow的版本控制,它使用
<year>.<month>.<day>.<buildNumber>
这里缺少的链接: