当前位置: 首页 > 面试题库 >

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

万俟修诚
2023-03-14
问题内容

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

是否有“最佳实践”方法

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

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

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

编辑2009-07-10

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

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


问题答案:

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

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

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

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

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


 类似资料:
  • 这样一堆 if 合理吗?后面还会加判断,会更多。 再拆分的话感觉不太好,有更好的方法吗?

  • 问题内容: 我一直在使用AngularJS的种子应用程序,并且注意到该应用程序的大多数依赖项(控制器,指令,过滤器,服务)都已预先加载。我想知道如何将Angular应用模块化为较小的字节,除非需要,否则不会加载依赖项。 例如,如果我有一个带有购物车的大型应用程序,添加/编辑送货地址,搜索结果,产品详细信息,产品列表等…购物网站上的用户可能永远不会遇到这些视图中的任何一个,但是看起来就像(从种子应用

  • TypeScript1.8现在支持非类型化的JS文件。要启用此特性,只需添加编译器标志--allowJs或将“allowJs”:true添加到tsconfig.json中的compilerOptions中 通过https://blogs.msdn.microsoft.com/typescript/2016/01/28/uncasting-typescript-1-8-beta/ 我正在尝试导入re

  • 本文向大家介绍如何理解前端模块化?相关面试题,主要包含被问及如何理解前端模块化?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 前端模块化就是复杂的文件编程一个一个独立的模块,比如js文件等等,分成独立的模块有利于重用(复用性)和维护(版本迭代),这样会引来模块之间相互依赖的问题,所以有了commonJS规范,AMD,CMD规范等等,以及用于js打包(编译等处理)的工具webpack

  • 我试图使我的Java应用程序模块化,这样就会有一个核心的基础模块,一个客户端将不得不aqcuire,但他/她将能够添加额外的功能/插件,因为他们出现了,或者她的需求扩展。 我计划在客户端pc中有一个名为modules/plugins的子目录,任何插件应用程序都将作为一个目录包含在内。jar文件。当用户启动应用程序时,主模块将在最后一项中包含这些其他插件,例如,一个舞台将在同一场景中包含来自主模块和

  • CommonJS AMD CMD UMD ES Modules