首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何模块化一个(大型) Java应用程序?

如何模块化一个(大型) Java应用程序?
EN

Stack Overflow用户
提问于 2009-05-19 07:03:26
回答 6查看 5.8K关注 0票数 17

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

有没有一种“最佳实践”的方法?

  • 识别可以立即成为依赖关系的部分现有代码
  • 处理我们需要应用到库中的“补丁”(目前是通过将它们放在类路径中而不是实际的库中来处理)

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

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

编辑2009-07-10

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

我在我的博客上写下了一些更一般的细节和个人观点--太长了,不能在这里发表,可能每个人都不感兴趣,所以你可以随意关注:www.danielschneller.com

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-19 07:35:19

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

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

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

该框架在概念上分为以下几个区域:

Java headers.

  • Services是具有额外清单的普通jar组件-服务层通过为普通的老JavaAPI注册表提供发布-查找-绑定模型以动态方式连接

  • -用于管理服务的API (ServiceRegistration、ServiceTracker和API -用于生命周期管理的API(安装、启动、停止、更新,卸载bundles).

  • Modules -定义依赖项的封装和声明的层(捆绑包如何导入和导出code).

  • Security -通过将捆绑包功能限制为预定义的capabilities.

来处理安全方面的层

票数 9
EN

Stack Overflow用户

发布于 2009-05-19 07:38:53

首先:祝你好运&好咖啡。这两个你都需要。

我曾经遇到过类似的问题。具有可怕的循环依赖关系的遗留代码,即使是来自不同包的类之间,如org.example.pkg1.A也依赖于org.example.pk2.B ,反之亦然。

我从maven2和fresh eclipse项目开始。首先,我尝试确定最常见的功能(日志层、公共接口、公共服务),并创建了maven项目。每次我对某个部分感到满意时,我都会将该库部署到中央nexus库中,以便几乎可以立即将其用于其他项目。

所以我慢慢地做了一层又一层。maven2处理了依赖关系,m2eclipse插件提供了一个有用的依赖关系视图。顺便说一句,将eclipse项目转换成maven项目通常并不太难。m2eclipse可以为您做到这一点,您只需创建一些新文件夹(如src/main/java)并调整源文件夹的构建路径即可。只需要一两分钟。但是,如果您的项目是一个eclipse插件或rcp应用程序,并且您希望maven不仅管理工件,而且还构建和部署应用程序,则会遇到更多困难。

从观点来看,eclipse、maven和nexus (或任何其他maven仓库管理器)都是一个很好的起点。您很幸运,如果您对系统体系结构和有很好的文档,那么这个体系结构就真正实现了;)

票数 6
EN

Stack Overflow用户

发布于 2009-05-19 19:16:41

对于现有的系统,迁移到Maven是很痛苦的。但是,它可以毫不费力地处理100+模块项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/881340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档