在使用maven时,如何自动将SNAPSHOT依赖项更新到最新发布的版本

时间:2013-02-22 12:09:06

标签: maven process release-management configuration-management

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

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

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

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

有没有办法做一个更新SNAPSHOT依赖关系到最新发布的版本然后在发布后回到SNAPSHOT版本的版本?或者这可能不是你应该使用maven与发行版和SNAPSHOTS的方式。

1 个答案:

答案 0 :(得分:1)

使用maven创建realease时:它必须是明确的。即一旦创建它就不能再改变(即源不能改变,依赖不能改变)。

因此,当您创建moduleA和moduleA的发行版时,它依赖于moduleB。必须在moduleA发布之前释放moduleB,而moduleA必须依赖于moduleB的发布版本。

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

  • create moduleB-1.0.0 release
  • 将依赖关系更改为moduleB-1.0.0
  • create moduleA-1.0.0 release
  • 然后将依赖关系更改回moduleB-1.0.0-SNAPSHOT

必须清楚的是,一旦moduleB-1.0.0存在(即被释放):不应再使用工件模块B-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不喜欢分层项目)