【问题标题】:Managing big multi-module projects in Subversion/Maven/Hudson在 Subversion/Maven/Hudson 中管理大型多模块项目
【发布时间】:2011-02-28 12:46:20
【问题描述】:

我们有一个相当大的 Java 应用程序,其中包含大量的 Maven 工件。每个子系统在 subversion 树中都有自己的文件夹,其中包含 trunk/、branches/ 和 tags/ 子文件夹,并托管多个工件。 Maven POM 的层次结构有多个级别。甚至依赖管理也被分成不同的模块。该应用程序被部署为多个 WAR 和其他 Zip/JAR 内容。

在构建和部署它的过程中,我经常不得不将应用程序视为一个单元。我遇到了很多困难,我想在这里分享。

  1. Subversion 布局:首先我不能用一个命令检查整个代码库。当我从顶层开始检查所有子项目的所有分支时,它太大了,而且会花费太长时间。我想减少工件的数量目前并不是一个真正的选择,因为它会导致太多的根本变化。但可能是具有聚合分支文件夹的不同颠覆布局确实会有所帮助。我尝试的一种解决方法是创建一个包含大量颠覆外部的单独文件夹,将正确的子文件夹聚集在一起。然后,例如,我可以使用来自顶级多模块工件的一个 maven 命令构建整个东西。

  2. 发布:发布是在整个代码库上完成的。首先,我制作了一个巨大的依赖关系图,其中我使用了专门为项目编写的自定义工具,因为无法直接使用 Maven 执行此操作。然后我必须在依赖关系树中逐步释放一层工件,从底部开始,从没有任何进一步依赖关系的工件开始,构建它们,如果成功地将父 POM 适应新版本,然后继续下一层.有时我想把所有的版本控制工作做两次,一次是在 subversion 中,一次是在所有的 POM 中。发布插件似乎也无法自动适应依赖管理。

  3. Hudson:在 Hudson,我们为所有父工件提供了大约 20 个工作。每个工件都有 3 个活动分支。这创造了大约 60 个工作岗位。每次分支更改时,都会导致浏览器中的大量鼠标单击工作。至少依赖作业的自动构建触发正在工作。但是,如果一个模块被分成一个编译作业和一个报告作业,这又会导致问题。通常编译比生成报告要频繁得多,后者不应减慢前者的速度。但是,每当报告作业运行时,它也会触发所有编译作业。如果工件真的被部署,Hudson 似乎不能只触发依赖作业。我还尝试为整个项目制作一个巨大的多模块构建,但增量构建功能无法正常工作。没有它,构建需要的时间太长了。但是需要构建相关的工件,因为您永远无法确定一个工件会导致什么变化。

  4. 聚合报告:我还没有弄清楚如何为每个父 POM 级别的单元测试、测试覆盖率、检查样式等生成聚合报告。有些插件甚至不支持聚合选项。对于其他人,我必须为层次结构中的每个级别再次进行构建。 Maven 站点报告还可以,但它们似乎是相当静态的,并且在浏览它们时用途有限。也许这里更好的选择是使用 Sonar Source 或其他一些源代码分析工具。此外,将这些报告集成到 Hudson 对我来说似乎并不理想。

从我的角度来看,我希望只有一个大存储库,我可以在其中签出一个目录,从源代码构建所有内容,为发布制作一个标签/版本,不依赖任何外部存储库并在 Hudson 中配置一项工作.但这可能与不同开发团队的需要相去甚远。似乎很难为两者找到一种易于管理的方式。

【问题讨论】:

  • 嗯..我有点困惑,因为我没有看到你的问题?

标签: java svn maven hudson multi-module


【解决方案1】:

我不知道这是否是一个简单的答案,但我有一个类似的项目(代码方面):2 个大型应用程序,一个有大约 10 个模块,一个有 15 个模块。我们拥有一个 subversion 存储库中的所有内容(例如 svn/trunk/app1 和 svn/trunk/app02)。在根文件夹(svn/trunk)中,我们有一个非常简单的 pom,它将版本和两个应用程序都定义为子模块。

通过此设置,我们可以完成您提到的大部分工作。甚至与每个开发团队分离,因为每个团队都提交到不同的文件夹/项目。我们甚至存储其他工件,例如文档和设计 (svn/trunk/documentation),因此我们可以跟踪特定版本的文档。

我知道这并不能解决您的第一个问题(您无法签出所有代码库),但是为什么需要“签出所有子项目的所有分支”?这听起来不对。你有快速连接到 svn 服务器吗?

注意:我们不会生成合并报告,因为我们更感兴趣的是每个应用程序都有一个报告,因为它们完全不同。

【讨论】:

  • 澄清一下,我不想想要查看所有分支。只是所有的主干文件夹都分布在整个颠覆树上,我首先必须将它们收集在一起,例如手动或使用颠覆外部。然后,如果我检查所有模块的所有主干文件夹,它仍然是大约 400 兆字节的数据。我想我可以通过排除某些包含文档或资源的文件夹来进一步缩小它。
  • 您似乎提到了这个问题:“只是所有主干文件夹都分布在整个颠覆树上,我首先必须将它们收集在一起”。听起来您可能需要花一些时间来整理您的存储库。或者可以创建一些脚本来检查正确文件夹中的必要项目。我刚刚检查了我有多少代码,大约是 290mb(2 个主要应用程序和一些常用实用程序模块),需要 3.20 分钟才能结帐。就像我之前提到的,我们将文档放在不同的文件夹中(大约 800mb)
猜你喜欢
  • 2011-05-02
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2019-08-28
  • 2016-01-27
相关资源
最近更新 更多