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



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

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

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

我尝试了maven发布插件prepare goal,并抱怨依赖项中的SNAPSHOT版本。

是否有一种方法可以将SNAPSHOT depenedencies更新到最新发布的版本,然后在发布后返回到SNAPSHOT版本?或者,这可能不是在发布版和SNAPSHOTS中使用maven的方式。

当您使用maven创建realease时:它必须是决定性的。即,一旦创建,它就不能再更改(即源不能更改,依赖项不能更改)。

因此,当您创建moduleA和moduleA的发布版本时,它们依赖于moduleB。模块B必须在模块a发布之前发布,模块a必须取决于模块B的发布版本。

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

  • 创建模块B-1.0.0版本
  • 将依赖项更改为模块B-1.0.0
  • 创建模块A-1.0.0版本
  • 然后将依赖关系更改回模块B-1.0.0-NAPSHOT

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

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

也就是说,发布依赖于许多SNAPSHOT工件的模块不是一个容易的过程,因为每个依赖项都必须在发布主工件之前发布。

大多数时候,我们所拥有的是一个主要的工件,它依赖于许多其他具有相同版本策略的工件(让我们称之为公司模块)。因此,您可以在一个位置定义一个属性corporate-module-version,其中包含许多依赖项使用的版本。

发布过程如下:

  • 发布版本号为1.0.0的每个快照依赖项(使用maven发布插件:在这一步骤之后,SCM中公司模块的所有pom.xml都是1.0.1-snapshot)(请参阅本文末尾的重要注释以促进这一步骤)
  • 手动在主工件中将corporate-module-version属性更改为"1.0.0"(以便所有SNAPSHOT依赖项都被刚刚发布的版本所取代)
  • 提交保存corporate-module-version的修改后的pom.xml
  • 使用maven发布插件:发布主工件(之后,SCM中的新版本将类似于1.0.1-SNAPSHOT)
  • 手动在主工件中将corporate-module-version属性更改为"1.0.1-SNAPSHOT"(以便所有依赖项都被最新的快照版本替换)

重要备注:必须有一个包含所有公司模块的多模块父项目,才能同时发布所有公司模块。为了避免在maven发布插件和多模块父项目上遇到太多麻烦,请确保将您的父pom.xml放在所有子pom.xml之上的一个目录中(这是maven推荐的设计,但不幸的是,有时eclipse用户不遵循它,因为eclipse不喜欢分层项目)

相关内容

  • 没有找到相关文章

最新更新