gpt4 book ai didi

java - 如何制作一个在运行时更新的 "modular"Java 程序?

转载 作者:行者123 更新时间:2023-11-30 07:02:37 25 4
gpt4 key购买 nike

我一直在考虑创建一个程序,该程序可以执行多个不同的任务,同时由一个中央线程监视。这个想法是创建一个核心程序,该程序将在运行时/运行时查找并加载单独的模块。这些模块将在将完成的对象传递给另一个模块之前执行自己的任务,该模块将处理诸如将完成的产品上传到 Web 服务器或将结果数据组织到预先确定的文件/文件夹结构(见图基本概念)。 enter image description here我以前从未真正使用过 Java 中的模块化设计;我过去所有的程序都是完全独立的,所以我几乎不知道从哪里开始。

我的目标是在核心程序中存储外部库(例如,适用于 Java 的 AWS SDK,它本身可以将 .jar 压缩到大约 18MB),以便在进行更新时几乎可以立即分发单独的模块,而不是为了修复 1 行错误而不得不重新分发整个 18MB 以上的独立程序。此外,我希望能够在必要时更新单个模块,而不必重新启动整个程序,允许其他模块在更新一个模块时继续工作,减少整体停机时间,以便程序唯一需要的时间完全关闭是在对核心进行更新时。

我想知道的是,这可能吗(我假设是这样),如果可能的话;我应该研究什么/我将如何设置它? (我是在重新发明轮子吗?如果是这样,我在哪里可以找到所说的轮子?)

我研究了使用 ServiceLoader 并尝试了示例 here ,但我不确定如何将一个模块指向另一个模块,或者它是否可以从核心检索库类,也不确定它是否可以执行提到的“主动更新”。到目前为止,我所看到的是(在我的示例中)核心可以访问模块,但我不确定模块是否/如何访问核心。

不确定它是否与帖子相关,但我在 Eclipse 中完成我的所有工作(如果有可用的特定 IDE 工具,我认为值得一提)。

最佳答案

看看 OSGi,Bundle Structure 基本上就是您要找的东西。使用 OSGi,您可以创建“bundle”,它们是带有 ➕ 元数据的 jar,用于告诉运行时(例如可以是 Apache Felix 或 Eclipse Equinox)您的 bundle 具有哪些依赖项以及它提供什么。使用 OSGi,您可以独立于所有其他 Bundle 启动、停止和更新每个 Bundle,它甚至可以根据其他功能停止并在 bundle 更新后重新启动它们(前提是您正确配置了它;))

@bhspencer:仅仅加载新的 jar 并不能让你正确更新,因为标准的 java 类加载器不允许卸载类。

关于java - 如何制作一个在运行时更新的 "modular"Java 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038857/

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