2016-11-11 117 views
1

我使用一个maven模块'foo-common'。我目前正在使用SNAPSHOT版本。我希望在这个模块发生任何变化时,它的版本会使用jenkins中的build-number进行增加,并将其部署到远程存储库。 但是,问题是,如果我的当前版本是1.0.40-SNAPSHOT,然后如果我想增加主要版本,那么版本将变为2.0.41-SNAPSHOT,这没有任何意义。 有人可以提出一个更好的方法吗?增量maven模块版本

回答

0

Maven使用两个概念:要么有快照要么发布。这些名称具有高度的误导性,我会相应地调用它们:temporary_candidate和permanent_version。

快照似乎是版本化的,但是如果您使用存储库(如Nexus等),您会注意到快照仅用于保留最近几次迭代,其中旧快照会快速删除。同样,在下载快照时,很明显,预期的用途是始终使用最新的。发布永久保存;预计这些发行版将按版本号下载。

版本号不适用于开发人员。它是开发人员和测试人员以及部署团队和最终用户之间的通信设备。

测试人员报告“复制此错误:(1)部署版本2.0.44-SNAPSHOT,(2)单击XYZ按钮”是没有意义的。该报告在“2.0.44-SNAPSHOT”部分被打破,因为它不是真实的版本号,测试者应该预计“2.0.44-SNAPSHOT”下面的代码已经改变,现在有完全不同的错误。而且每次重新部署时都会发生变化。

预期的用途是仅在存在正在进行的对话时才向测试者/用户显示SNAPSHOT。一旦情况消失,你就会释放。

詹金斯有一个非常有用的发布插件。它允许更改版本号并执行所有发布任务(包括但不限于maven release pluigin)。

+0

目前我正在使用Jenkins Artifactory插件来推送快照。如果我使用这个插件,那么我的应用程序如何从Artifactory下载最新版本?我的意思是,如果artifactory中有foo-common-1.0.10和1.0.11,那么在执行构建时,我的应用程序应该从artifactory下载最新的foo-common – humblebee

+0

@ falcon01 [如何告诉maven使用最新版本以及为什么人们反对它)](http://stackoverflow.com/questions/30571/how-do-i-tell-maven-to-use-the-latest-version-of-a-dependency) – kubanczyk

0

maven的想法是你使用mvn release插件将版本从SNAPSHOT移动到发布版本。

所以,如果你没有(假设你有正确的POM):

mvn release:prepare release:perform 

这将删除快照发布的版本中,在你的榜样,这将是1.0.40,那么它会标记这个版本在使用标签进行源代码管理时,它会将完成的工件推送到标签中定义的发布存储库,然后将版本移动到下一个SNAPSHOT,在您的情况下它将是1.0.41-SNAPSHOT。

如果你想做一个主要的版本发布版本,你应该在mvn版本上手动移动版本:set 1.1.0-SNAPSHOT。