代码之家  ›  专栏  ›  技术社区  ›  13ren

在企业Java/.Net项目中,每个开发人员的类路径中是否都有所有依赖项?

  •  2
  • 13ren  · 技术社区  · 17 年前

    每一个 全部的

    或者它们被划分成更小的部分,可以独立构建(这样它们就不需要引用所有依赖项)?


    大型企业项目通常采用第一种方式还是第二种方式组织?


    如果您正在处理整个项目中自包含但被其他模块引用的模块(换句话说,依赖关系树中的叶节点),则可能是一个组织。

    另一个组织是,如果动态加载所使用的类,则可以在类路径中不包含任何类的情况下进行构建。要运行它,您的类路径只需要访问您实际加载的类(可能还有许多其他类构成了项目的不同部分,而您没有加载)。

    这些都是理论上的可能性;但是,企业项目的标准实践是什么呢。。。实际上呢?


    我将其扩展到包括.Net,因为我认为同样的问题也会出现(DLL地狱?)

    6 回复  |  直到 17 年前
        1
  •  4
  •   Michael Borgwardt    17 年前

    对于每个项目,这个问题都有不同的答案。几点一般性意见:

    • “运行应用程序的一个子集”通常是不可能的,因为很少有应用程序是模块化的,因此它们的每个部分实际上都可以独立运行。
    • 最大的区别通常不是拥有与不拥有所有组件之间的区别,而是将它们作为源代码与将它们作为JAR文件之间的区别。
    • 如果您需要运行时模块化(即在运行时按需加载和卸载组件),这就是 OSGi 是为……而设计的。
        2
  •  2
  •   Thilo    17 年前

    爱上 与他们精心设计的构建系统(如Maven)建立了爱恨关系,Maven为他们管理开发环境。

    对于不使用此类系统的项目,通常最简单的方法是始终包含所有内容。取舍是不必要的臃肿的开发环境,而不是必须花费时间来跟踪缺少的依赖项。

        3
  •  1
  •   Tomas Lin    17 年前

    一个好的项目结构将分解一些东西,这样您就可以运行独立的模块。

    但在现实生活中,我所见过的大多数项目都是在有人厌倦了并主动打破它们之后才会这样做的。

    如果您正确地使用了良好的依赖关系管理基础设施(如Maven或Ivy),则可以将编译后的模块存储在服务器上,并根据需要下载这些依赖关系。

        4
  •  1
  •   CPerkins    17 年前

    我当然同意这样的评论,即把事情分开是“好的”。但实际上,这是非常罕见的。

    简单的解决方案是在一个共享服务器上建立一套完整的、经过集成测试(或集成测试就绪)的依赖关系。

        5
  •  0
  •   duffymo    17 年前

    无论您是单独开发人员还是在更大的分布式团队中工作,这都是事实。

    根据我的经验,应用程序是单向打包的。如果您只需要一个子集,那么必须将其打包。

    如果您的意思是将测试用例作为独立的东西,那么这些测试用例通常不会与生产代码打包在一起。

        6
  •  0
  •   Cem Catikkas    17 年前

    在我看来,不是开发人员是否可以处理应用程序的子集,而是管理组成应用程序的项目(比如Eclipse项目)之间的依赖关系。通常,您可能有一个这样的项目树,其中一个或多个项目可以依赖于其他项目。在这种情况下,上游/普通项目的角色通常是确保下游项目不会因该上游项目的变更而中断。

    这样想吧——假设你有一个 utils 乌提尔斯 .

        utils
       /     \
    proja   projb
    

    在本例中,工作人员 乌提尔斯 proja 和 projb 对其发展环境的任何改变 我会打破它们的。但是如果你只是在 项目 那么您可能不必包括 普罗贾 因为您对该项目没有依赖关系。