【问题标题】:Maven versioning best practices [closed]Maven 版本控制最佳实践 [关闭]
【发布时间】:2012-03-22 05:15:17
【问题描述】:

更改 Maven 项目版本、发布此版本然后返回*-SNAPSHOT 开发的最佳方法是什么。

目前我正在做以下事情:

  • pom.xml检索当前版本(很可能是SNAPSHOT
  • 增量版本(mvn -DnewVersion=<something> versions:set),尊重问题Maven artifact version for patches中描述的规则
  • mvn:install 发送到回购
  • 重命名版本再次添加SNAPSHOT后缀。
  • 提交更改(使用某些版本控制系统)

我有一种强烈的感觉,我做错了什么和/或效率低下。

【问题讨论】:

  • 通常夜间构建具有下一个版本号-SNAPSHOT。因此,在发布时只需删除 -SNAPSHOT 并发布它。

标签: maven versioning


【解决方案1】:

您应该使用maven-release-plugin 来发布您的工件。发布插件会自动增加所有版本。如果您要从 1.0.3-SNAPSHOT 变为 1.1.0-SNAPSHOT ,则可能是例外。 使用 Maven 进行开发的时间表是:

1.0.0-SNAPSHOT
1.0.0
1.0.1-SNAPSHOT
1.0.1
1.0.2-SNAPSHOT
1.0.2
..

要进行从 SNAPSHOT 到发布版本的步骤,您应该使用 maven 发布插件,您可以简单地使用以下方法发布工件:

第一步:

mvn release:prepare 

最后一步:

mvn release:perform

如果您想接受默认值,只需添加 -B 即可:

mvn -B release:prepare 

或者您可以将这些步骤合并为一个:

mvn -B release:prepare release:perform

以上内容也可以在 CI 解决方案中使用。

使用 mvn install 只是为了将工件安装到您的本地存储库中。如果您正在使用真正的存储库管理器(我可以推荐),您必须使用:

mvn deploy 

使用发布插件的一个要求是在你的 pom 中配置 scm 区域(我希望你使用的是版本控制?)。

【讨论】:

  • 您甚至可以省略 z 位置,因为例如1.1 和 1.1.0 是相等的。这就是我所做的,所有的 Maven 插件都是这样做的。此外,唯一的release:peform 将失败,因为您没有提供-DscmUrl=...
  • @Michael-O 为什么要在命令行中指定 SCM URL?我怀疑 khmarbaise 是通过 POM 设置 提供的
  • @earcam,因为插件需要从那里知道必须构建版本。 scm 元素在默认结账时不包含主干。
  • 凹凸。 release:prepare 实际上在提交时会在 TAG 中添加一个 scm 路径。执行 release:perform 时,将构建最新的标签,它神奇地设置了 scm 路径。这就是为什么您不必在主干项目中指定任何路径的原因。
  • 我可以确认。如果您喜欢使用1.0-SNAPSHOT,则发布版本将是1.0...而不是1.0.0...
【解决方案2】:

如果您想对发布阶段进行更多控制,maven-release-plugin (mrp) 对您帮助不大。

在这种情况下,我有 modified versions-maven-plugin 能够增加版本并添加/删除 SNAPSHOT 后缀

借助这些新功能,您可以编写与 mrp 执行相同操作的脚本,但您可以完全控制每个步骤。

例如,mrp 在实际尝试构建它之前提交更改的版本。如果构建失败,您必须恢复该提交,或者在 SVN 的情况下,您必须执行另一个 revert-commit。

注意:我不是增量函数的原作者。我已经采纳了 来自 autoincrement-versions-maven-plugin,如 github 页面所述。

【讨论】:

  • 我在官方versions-maven-plugin github 页面上创建了一个拉取请求,希望他们能整合它github.com/mojohaus/versions-maven-plugin/pull/23
  • 如果我不想让 maven 搞乱 SCM 怎么办?例如,通过 GitHub 操作,我可以使用 TAG 操作触发一些 CI,但这与 Maven 发布过程直接冲突...
  • 嗯,过去 5 年发生了很多变化。如果他们没有更新插件以使其更可用(但是他们甚至没有理会我上面的拉取请求),我会考虑使用不同的方法。虽然不知道是哪一个。
  • 我最终向another SO 提出了这个问题,因为我找不到合适的解决方案。原来它可以通过版本插件来完成。
  • 我上面的解决方案也使用versions-maven-plugin。它只是增加了另一个目标,使其更加灵活。虽然现在我想它有点过时了。
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2010-09-24
  • 2021-09-18
  • 1970-01-01
  • 2020-03-13
相关资源
最近更新 更多