一尘不染

如何模块化(大型)Java App?

java

我手头有一个相当大的应用程序(几个MLOC),我想将其分解为更易于维护的单独部分。当前,该产品由大约40个Eclipse项目组成,其中许多项目具有相互依赖性。仅此一项就使连续构建系统不可行,因为每次检入都必须进行大量重建。

是否有“最佳实践”方法

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

如果有(免费/开放)工具来支持这一点,我将感谢指针。

即使我没有使用Maven的任何经验,似乎也迫使它采用了非常模块化的设计。我现在想知道这是否是可以迭代地进行改造的,还是要使用它的项目是否必须从一开始就考虑模块化就进行布局。

编辑2009-07-10

我们正在使用Apache Ant /
Ivy
拆分一些核心模块。真正有用且精心设计的工具,没有像maven那样强加给您。

我在博客上写下了一些关于我们为什么这样做的更一般的详细信息和个人见解-
太久了,无法在此处发布,可能对每个人都不感兴趣,因此请自行决定:www.danielschneller.com


阅读 239

收藏
2020-12-03

共1个答案

一尘不染

使用OSGi可能非常适合您。它将允许在应用程序之外创建模块。您还可以更好地组织依赖关系。如果您正确定义了不同模块之间的接口,则可以使用连续集成,因为您只需重建在签入时受影响的模块即可。

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

维基百科显示的一些OSGi概念似乎很适合您:

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

  • 捆绑软件-捆绑软件是带有额外清单标题的普通jar组件。
  • 服务-服务层通过为普通的旧Java对象(PO​​JO)提供发布-查找-绑定模型,以动态方式连接包。
  • 服务注册表-用于管理服务(ServiceRegistration,ServiceTracker和ServiceReference)的API。
  • 生命周期-生命周期管理(安装,启动,停止,更新和卸载捆绑软件)的API。
  • 模块-定义封装和依赖关系声明的层(包如何导入和导出代码)。
  • 安全性-通过将捆绑软件功能限制为预定义功能来处理安全性方面的层。
2020-12-03