gpt4 book ai didi

java - 如何模块化(大型)Java 应用程序?

转载 作者:太空狗 更新时间:2023-10-29 22:40:09 26 4
gpt4 key购买 nike

我手头有一个相当大的(几个 MLOC)应用程序,我想将其拆分为更易于维护的独立部分。目前该产品由大约 40 个 Eclipse 项目组成,其中许多项目相互依赖。仅这一点就使持续构建系统变得不可行,因为每次 checkin 都必须重建很多。

是否有“最佳实践”方法来

  • 确定可以立即分离的部分
  • 直观地记录相互依赖性
  • 解开现有代码
  • 处理我们需要应用到库的“补丁”(目前通过将它们放在实际库之前的类路径中来处理)

如果有(免费/开放的)工具支持这一点,我将不胜感激。

尽管我没有任何使用 Maven 的经验,但它似乎强制采用了非常模块化的设计。我现在想知道这是否是可以迭代改造的东西,或者使用它的项目是否必须从一开始就考虑模块化布局。

编辑 2009-07-10

我们正在使用 Apache Ant/Ivy 拆分出一些核心模块.真正有用且设计良好的工具,不像 maven 那样强加于你。

我在我的博客上写下了一些更一般的细节和个人意见,说明我们为什么要这样做——太长了,无法在这里发布,而且可能不是每个人都感兴趣,所以请自行决定遵循:www.danielschneller.com

最佳答案

使用 OSGi可能很适合你。它将允许从应用程序中创建模块。您还可以更好地组织依赖关系。如果您正确定义了不同模块之间的接口(interface),那么您可以使用持续集成,因为您只需要重建在 checkin 时受影响的模块。

OSGi 提供的机制将帮助您理清现有代码。由于类加载的工作方式,它还可以帮助您以更轻松的方式处理补丁。

Some concepts of OSGi that seem to be a good match for you, as shown from wikipedia:

该框架在概念上分为以下几个方面:

  • bundle - bundle 是带有额外 list header 的普通 jar 组件。
  • 服务 - 服务层通过为普通旧 Java 对象 (POJO) 提供发布-查找-绑定(bind)模型以动态方式连接 bundle 。
  • Services Registry - 用于管理服务(ServiceRegistration、ServiceTracker 和 ServiceReference)的 API。
  • Life-Cycle - 用于生命周期管理的 API(安装、启动、停止、更新和卸载 bundle )。
  • 模块 - 定义封装和依赖声明的层(包如何导入和导出代码)。
  • 安全性 - 通过将捆绑功能限制为预定义功能来处理安全方面的层。

关于java - 如何模块化(大型)Java 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881340/

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