【问题标题】:Releasing with Maven使用 Maven 发布
【发布时间】:2011-03-12 19:28:32
【问题描述】:

我最近发布了一个 maven 项目,并不能停止认为整个过程非常复杂且容易出错。假设我有一个应用程序,它由 3 个模块 A、B 和 C 组成,每个模块在 subversion 中都有自己的文件夹,在 Hudson 中有一个单独的构建作业。每个模块都有一个父 POM,它聚合了多个工件。 A 依赖于 B,B 依赖于 C。依赖版本在顶级 POM D 中定义,它是 A、B 和 C 的父级。它除了确保所有版本都保存在一个位置之外,什么也不做。整个项目中使用的每个工件只有一个版本。为了发布,我执行以下操作:

  1. 通过 Hudson 使用发布插件发布顶级 POM D。
  2. 从没有进一步依赖关系的 C 开始。
  3. 更改 C 以引用 D 的已发布版本。带有发布插件的发布 C。
  4. 在 D 中输入 C 的发布版本,这样依赖 C 的模块就可以使用 C 的稳定版本发布。
  5. 使用发布插件再次发布 D。
  6. 为 B 做 3-5 次
  7. 为A做3-5

之后,我拥有 A、B 和 C 中所有工件的稳定非快照构建,并且可以将它们组装在一起以形成应用程序的最终稳定版本。

实际上,我不仅有 3 个,而且有 20 个这样的模块。现在我发现这个过程非常复杂,我认为它有很多潜在的问题:

  • 我需要多次释放 D,对于依赖层次结构中的每个级别一次。最后,我得到了 D,其中只有稳定版本的 A、B 和 C。要继续下一个开发版本,我必须再次编辑 D 并引用已发布模块的所有新快照版本。通常,依赖管理必须全部手动完成,即使使用发布插件也是如此。

  • 如果有人在我发布时提交,可能会搞砸事情。为了确保我必须检查所有模块的特定修订,构建和测试它,然后为该修订上的所有模块进行发布。但是,我如何确保 Hudson 和多个工作岗位呢?

  • 依赖于 3 个不同的系统:Subversion 服务器、Hudson 服务器和 Maven 存档服务器。如果只有一个倒下,我就不能再释放了。

  • 耗时。在这个过程中,我发布的每个模块一次又一次地进行大量的构建、打包、上传、下载、提取等。与存档发生大量冗余数据交换。但实际上一切都可以在本地完成,因为 Hudson 拥有它需要的所有源代码。最后只需要上传一次最终包。

  • 假设我在存档服务器上丢失了包。没有简单的方法告诉 Hudson 检查标记的版本并以正确的顺序重新构建它们。

为什么这不像一次性检查所有代码、调整一个全局版本、构建和测试、提交、标记提交并最后上传二进制文件那样简单?

感谢您对此提出任何想法。

【问题讨论】:

    标签: java svn maven hudson maven-release-plugin


    【解决方案1】:

    就这么简单。使用父 pom,您可以让所有模块指向同一个父级。然后将子模块版本设置为:${version.properties},当您运行构建时使用mvn -Dversion.properties x.y.x-SNAPSHOT(用于开发)或x.y.z 用于生产构建运行它,然后所有模块将使用相同的版本一次部署。

    因此,对于要在 settings.xml 中指定 <version.properties>1.1.1-SNAPSHOT</version.properties> 的自动构建,如果您需要已发布的产品,请在运行时使用 -Dx.y.z 指定附加参数以覆盖 settings.xml 文件。

    唯一的窍门是你的父 pom 需要有一个非动态指定的版本,并且还需要在所有子文档中设置。因此,在每个版本之后,您可能需要手动更新该版本号(尽管可能有一个插件)

    【讨论】:

    • 我已经怀疑拆分成这么多模块并不是最好的主意,因为最终您需要将所有内容打包到一个发行版中。这也意味着需要更改颠覆布局,以便可以使用一个文件夹检出所有模块。另一方面,像 Hudson 这样的持续集成服务器可能是做“非持续”发布的错误地方。此外,我不确定 Hudson 处理大型多模块作业的能力如何,增量构建是否真的会起作用以缩短构建时间并仅重建已更改的内容。
    【解决方案2】:

    如果你总是同步发布你的模块,我会为整个项目创建一个父 pom,其中包含所有模块并确保所有版本都相同。当您发布顶层时,它会一次性以正确的版本按顺序发布所有模块。

    【讨论】:

      猜你喜欢
      • 2015-05-04
      • 1970-01-01
      • 2021-11-10
      • 2011-06-18
      • 2020-10-19
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多