gpt4 book ai didi

java - 在Subversion/Maven/Hudson中管理大型多模块项目

转载 作者:行者123 更新时间:2023-11-30 11:55:12 25 4
gpt4 key购买 nike

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

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


Subversion布局:首先,我不能只用一个命令检出整个代码库。它太大了,当我从顶层开始并检出所有子项目的所有分支时,将花费很长时间。我猜目前减少工件的数量并不是真正的选择,因为这会导致太多的根本变化。但是,使用聚合分支文件夹的另一种Subversion布局确实会有所帮助。我尝试的一种解决方法是制作一个单独的文件夹,其中包含许多Subversion外部组件,这些文件夹将正确的子文件夹聚集在一起。然后,例如,我可以使用顶级多模块工件中的一个maven命令来构建整个内容。
发布:在整个代码库中完成了发布。首先,我制作了一个巨大的依赖图,在其中使用了专门为该项目编写的自定义工具,因为不可能直接使用Maven进行此操作。然后,我必须在依赖关系树中逐步释放一层工件,从底部开始没有任何其他依赖的工件,如果成功将父POM适应新版本,则构建它们,然后继续进行下一层。有时候,我觉得所有版本控制工作都要进行两次,一次是在Subversion中,一次是在所有POM中。发行插件似乎还不能自动适应依赖性管理。
哈德逊(Hudson):在哈德逊(Hudson),我们为所有父艺术品提供了20个工作。对于每个工件,有3个活动分支。这使60个工作。每次分支更改都会导致浏览器中的大量鼠标单击工作。至少依赖作业的自动构建触发正在运行。但是,如果将模块拆分为编译作业和报告作业,则会再次引起问题。通常,编译要比生成报告更为频繁,并且后者不应减慢前者的工作速度。但是,每当报表作业运行时,它也会触发所有编译作业。如果确实部署了工件,Hudson似乎无法仅触发依赖的作业。我还尝试为整个项目进行一个巨大的多模块构建,但是增量构建功能无法正常工作。没有它,构建将花费太长时间。但是需要构建依赖的工件,因为您永远无法确定一个工件会导致什么变化。
汇总报告:我还没有弄清楚如何为父POM的每个级别生成单元测试,测试覆盖率,检查样式​​和其他报告的汇总报告。有些插件甚至不支持聚合选项。对于其他人,我必须为层次结构中的每个级别再次进行构建。 Maven站点报告还可以,但是它们似乎是静态的,并且在浏览它们时用途有限。也许这里更好的选择是使用诸如Sonar Source之类的工具或其他一些源代码分析工具。同样,将这些报告整合到Hudson中对我来说也不理想。


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

最佳答案

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

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

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

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

关于java - 在Subversion/Maven/Hudson中管理大型多模块项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5142161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com