【发布时间】:2011-03-12 19:28:32
【问题描述】:
我最近发布了一个 maven 项目,并不能停止认为整个过程非常复杂且容易出错。假设我有一个应用程序,它由 3 个模块 A、B 和 C 组成,每个模块在 subversion 中都有自己的文件夹,在 Hudson 中有一个单独的构建作业。每个模块都有一个父 POM,它聚合了多个工件。 A 依赖于 B,B 依赖于 C。依赖版本在顶级 POM D 中定义,它是 A、B 和 C 的父级。它除了确保所有版本都保存在一个位置之外,什么也不做。整个项目中使用的每个工件只有一个版本。为了发布,我执行以下操作:
- 通过 Hudson 使用发布插件发布顶级 POM D。
- 从没有进一步依赖关系的 C 开始。
- 更改 C 以引用 D 的已发布版本。带有发布插件的发布 C。
- 在 D 中输入 C 的发布版本,这样依赖 C 的模块就可以使用 C 的稳定版本发布。
- 使用发布插件再次发布 D。
- 为 B 做 3-5 次
- 为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