1

我正在尝试为我们的项目定义一个发布流程。

我能够使用 maven 发布插件来完成发布,但我必须手动更新我们所有的内部 SNAPSHOT 依赖项以在准备之前发布版本,然后在发布之后再次回到 SNAPSHOT 版本。

我使用了 maven 版本插件,它检测到我的公司依赖项是 SNAPSHOT 构建并列出要使用的正确版本构建。

我尝试了 maven 发布插件,准备目标,并抱怨我的依赖项中的 SNAPSHOT 版本。

有没有办法进行发布,将 SNAPSHOT 依赖项更新到最新发布的版本,然后在发布后返回到 SNAPSHOT 版本?或者,也许这不是您应该将 maven 与发布和快照一起使用的方式。

4

1 回答 1

1

当您使用 maven 创建一个发布时:它必须是确定的。即一旦创建它就不能再改变(即源不能改变,依赖不能改变)。

因此,当您创建依赖于 moduleB 的 moduleA 和 moduleA 的发布时。moduleB 必须在 moduleA 发布之前发布,并且 moduleA 必须依赖于 moduleB 的发布版本。

一件重要的事情是你不应该回到 SNAPSHOT版本。至少据我了解,这意味着:

  • 创建模块B-1.0.0 发布
  • 将依赖关系更改为 moduleB-1.0.0
  • 创建 moduleA-1.0.0 版本
  • 然后将依赖项改回 moduleB-1.0.0-SNAPSHOT

必须清楚的是,一旦 moduleB-1.0.0 存在(即发布):工件 moduleB-1.0.0-SNAPSHOT 就不应再使用了。

与其返回 SNAPSHOT ,不如将依赖项更新到下一个 SNAPSHOT 版本(例如 moduleB-SNAPSHOT-1.0.1)

话虽如此,根据许多 SNAPSHOT 工件发布模块并不是一个简单的过程,因为必须在发布主工件之前释放每个依赖项。

大多数时候,我们拥有的是一个主要工件,它依赖于具有相同版本控制策略的许多其他工件(我们称它们为企业模块)。因此,您可以corporate-module-version在一个地方定义一个属性来保存许多依赖项使用的版本。

发布过程如下:

  • 释放版本号为 1.0.0 的每个快照依赖项(使用 maven-release-plugin:在此步骤之后,SCM 中企业模块的所有 pom.xml 都是 1.0.1-SNAPSHOT)(请参阅本文末尾的重要注释以方便此步骤)
  • 在主工件中手动corporate-module-version属性更改为“1.0.0”(以便所有 SNAPSHOT 依赖项都被刚刚发布的版本替换)
  • 提交修改后的 pom.xml 持有corporate-module-version
  • 使用 maven-release-plugin:发布主要工件(之后,SCM 中的新版本将类似于 1.0.1-SNAPSHOT)
  • 在主工件中手动corporate-module-version属性更改为“1.0.1-SNAPSHOT”(以便所有依赖项都替换为最新的快照版本)

重要说明:拥有一个包含所有公司模块的多模块父项目是必须立即执行所有公司模块的发布。为了不让 maven-release-plugin 和多模块父项目遇到太多麻烦,请务必将父 pom.xml 放在所有子 pom.xml 之上的一个目录(这是 maven 设计推荐的,但不幸的是,有时,eclipse用户不关注是因为eclipse不喜欢分层项目)

于 2013-02-22T12:58:34.130 回答