【问题标题】:How do I automate the update of SNAPSHOT dependencies to the latest released versions when using maven使用 maven 时如何自动将 SNAPSHOT 依赖项更新到最新发布的版本
【发布时间】:2013-02-22 20:58:34
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: maven process release-management configuration-management


    【解决方案1】:

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

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

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

    • 创建 moduleB-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 版本(例如 moduleB-SNAPSHOT-1.0.1)

    ,而不是 返回 SNAPSHOT

    话虽如此,根据许多 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 不喜欢分层项目)

    【讨论】:

    • 当我说回到快照时,我的意思是快照的下一个版本。看起来我必须为每个版本手动更改企业依赖的版本,这不是一个理想的解决方案,但可行,因为所有版本都在顶级 pom 中定义为属性。
    猜你喜欢
    • 2012-06-02
    • 2015-04-16
    • 2016-07-24
    • 2019-06-15
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2012-01-03
    相关资源
    最近更新 更多