最近发布了一个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 检查标记的版本并以正确的顺序重新构建它们。
为什么这不像一次性检查所有代码、调整一个全局版本、构建和测试它、提交、标记提交并最终上传二进制文件那样简单?
感谢您对此的任何想法。