有一些关于如何处理Maven版本号和持续交付(CD)的好的讨论和建议(我会在我的回答后添加它们)。
首先,我对SNAPSHOT版本的看法。在Maven中,SNAPSHOT表示该版本目前正在开发中,是特定版本的SNAPSHOT后缀之前的版本。因此,像Nexus或maven-release-plugin这样的工具对SNAPSHOT有特殊处理。对于Nexus,它们存储在单独的存储库中,并且允许使用相同的SNAPSHOT发布版本更新多个构件。因此,在项目中不建议使用SNAPSHOT依赖项,尤其是在CD世界中,因为构建不再可靠。
SNAPSHOT作为项目版本将成为问题,当其他项目使用您的项目时,就会出现上述问题。
对我来说,SNAPSHOT的另一个问题是它不太可追踪或可重现。当我在生产环境中看到版本0.0.1-SNAPSHOT时,我需要进行一些搜索,以找出它是从哪个修订版本构建的。当我在文件系统上找到这个软件的版本时,我需要查看pom.properties或MANIFEST文件,以确定这是否为旧垃圾还是最新版本。
为了避免手动更改版本号(特别是当您每天构建多个构建时),让构建服务器为您更改编号。因此,对于开发,我会选择一个
<major>.<minor>-SNAPSHOT
版本号通常以SNAPSHOT结尾,但在构建新版本时,构建服务器可以将SNAPSHOT替换为更独特和可追踪的内容。
例如:
<major>.<minor>-b<buildNumber>
<major>.<minor>-r<scmNumber>
因此,主版本号和次版本号可用于营销问题或仅显示达到了新的重要里程碑,并且可以在任何时候手动更改。而buildNumber(来自您的持续集成服务器的数字)或scmNumber(SUbversion或GIT的修订版)使每个发布都是独特且可追踪的。当使用buildNumber或Subversion修订版时,项目版本甚至是可排序的(不适用于GIT编号)。使用buildNumber或scmNumber也很容易看出此版本中有哪些更改。
另一个例子是stackoverflow的版本控制。
<year>.<month>.<day>.<buildNumber>
以下是缺失的链接:
这些链接涉及IT技术,需要注意的是保留HTML标记,同时让内容更加通俗易懂。