繁体   English   中英

使用Maven时如何自动将SNAPSHOT依赖项更新为最新发布的版本

[英]How do I automate the update of SNAPSHOT dependencies to the latest released versions when using maven

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

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

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

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

有没有办法发布将SNAPSHOT依赖关系更新为最新发行版本,然后在发行后又恢复为SNAPSHOT版本的发行方式? 或者,也许这不是您应该在发行版和SNAPSHOTS中使用Maven的方式。

当您使用Maven创建一个Realease时:它必须是确定的。 即,一旦创建它就不能再更改(即,源不能更改,依赖项也不能更改)。

因此,当您创建依赖于moduleB的moduleA和moduleA的发行版时。 在释放模块A之前必须释放模块B,并且模块A必须取决于模块B的发行版本。

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

  • 创建moduleB-1.0.0版本
  • 更改对模块B-1.0.0的依赖
  • 创建moduleA-1.0.0版本
  • 然后将依赖项更改回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依赖项都由刚刚发布的版本替换)
  • 提交保存了corporate-module-version的修改后的pom.xml
  • 使用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不喜欢分层项目)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM