在源代码管理中,多语言项目的明智结构是什么?

问题描述 投票:4回答:1

[在工作中,我们正在开发具有大量前端,后端和支持组件的大型应用程序。通常,前端是用C#开发的,后端是用Java开发的,尽管后端的某些部分也是用C#和更高版本的C ++开发的。

语言和平台的选择不是任意的;我们尝试权衡每种工具在开发时间,工具链成本,特定开发团队对语言的熟悉程度等方面的相对优缺点。尽管如此,所有这些组件的共同点是,它们都是完整的操作所必需的产品,并由独立的(但高度沟通)团队同时开发。

[以前,我们将Team Foundation Server用于.NET代码,并将Subversion用于Java代码;因为团队的职责明确分开,所以除了将不方便将源树中生成的二进制文件(在这种情况下为WAR)放置在另一个源树中,以及将分支和修订版本保持同步的高人工开销之外,这没有什么问题。在这个项目中,团队之间的分离度有意要小得多,分支/合并的数量预计会更高。因此,我们正在使用统一的VCS,更具体地说是Subversion。

这使我想到了一个问题:如何有效地混合Java和C#代码?实际上,我们将拥有依赖于Java代码库的.NET代码。 Java二进制文件必须运行除单元测试代码以外的任何内容(集成测试已经需要二进制文件,并且QA,验收测试等当然也需要)。我们目前的想法如下:

/树干/ java/ component1/ component2/图书馆1/ library2/净/ assembly1/ assembly2/ ...project.sln

这个想法是将整个源代码树放在一个分支下; .NET代码取决于Java代码,因此我们将在解决方案中添加一个后构建步骤,该步骤(很可能)将调用Java组件的ant脚本。这允许分支整个代码库(对于.NET开发人员)或仅对Java组件(对于Java开发人员)进行分支。

此解决方案的问题是:

  1. 当两个代码库之一变得太大而无法为每个分支制作它的副本时,会发生什么? (我们的想法:将.NET和Java代码拆分为单独的存储库,并使用svn:externals,对此的任何输入都会受到[[greatly的赞赏)。
  2. 我们使用Eclipse进行Java开发。我们如何管理“共享”工作空间(即哪些项目需要哪些组件,依赖关系图等)?到目前为止,我们的Java组件相对较少,因此每个开发人员都可以将所有这些组件同时保留在工作空间中。随着Java组件和Java开发人员的增加,我看不到如何继续做到这一点。关于如何在保持两个代码库之间的同步的同时保持工作空间版本化(解决方案文件)的任何建议?
  • 我很想听听您的意见!
  • version-control projects-and-solutions monorepo
    1个回答
    1
    投票
    1:我发现最好按组件而不是语言对事物进行分组。如果一个组件需要多种语言的界面,您仍然需要将它们作为一种语言进行开发,测试和发布。因此,将组件拆分成几个存储库是一个好主意。

    如果代码的一部分紧密依赖于另一部分,则将其保持在一起。更好地在回购中拆分组件。 (这甚至适用于内部结构,在内部结构中,尤其是随着事物的增长,如果您按类型而不是按功能打包,则很难,即在MVC中,每个类别没有三个庞大的包,而是保留FooView,FooModel和FooController紧密。)

    svn:externals可能有效,在更高版本中,我认为您可以使用“ internals”,即链接到同一存储库中的其他目录。这比管理单独的存储库要容易得多,尤其是在标记和分支方面。 (颤抖)

    2:您可以始终让开发人员设置不同的工作区,或者使用工作集。商业Eclipse版本比OS变体更好地支持共享工作区设置。 (还没有尝试过,只对操作系统有效而感到沮丧)

    我已经在一个仓库中完成了C ++(MSVS)和Java(Eclipse),并且效果很好。同样,C ++ / Python。确保您的构建系统支持构建和测试所有内容(即使您的IDE仅构建一部分)。

    © www.soinside.com 2019 - 2024. All rights reserved.