向 J2SE 应用程序添加插件支持的最佳技术? [关闭]

Posted

技术标签:

【中文标题】向 J2SE 应用程序添加插件支持的最佳技术? [关闭]【英文标题】:Best technology for adding plugin support to a J2SE application? [closed] 【发布时间】:2010-09-10 00:53:52 【问题描述】:

我正在编写一个 J2SE 桌面应用程序,该应用程序要求其中一个组件是可插拔的。我已经为这个插件定义了 Java 接口。用户应该能够在运行时(通过 GUI)选择他们想要使用该接口的哪个实现(例如在初始化对话框中)。我设想每个插件都被打包为一个 JAR 文件,其中包含实现类以及它可能需要的任何辅助类。

在桌面 Java 应用程序中做这类事情的最佳技术是什么?

【问题讨论】:

JSPF 是如何为您服务的?我创建了一个反馈线程:***.com/questions/1613935 我还没用过,等我用完再发回来。 【参考方案1】:

在多次尝试基于插件的 Java 架构(正是您所寻找的)之后,我终于发现 JSPF 是 Java5 代码的最佳解决方案。它没有像 OSGI 这样的解决方案的巨大需求,而是相当容易使用。

【讨论】:

我去项目现场看了演示视频; JSPF 似乎很容易使用,正是我想要的!非常感谢。【参考方案2】:

我正在考虑的一种方法是让我的应用程序启动一个轻量级 OSGi 容器,如果我理解正确的话,它将能够发现指定文件夹中存在哪些插件 JAR 文件,这反过来又可以让我列出它们以供供用户选择。这可行吗?

我还发现了 Richard Deadman 的 this article,但它看起来有点过时(2006 年?)并且既没有提到 OSGi(至少没有提到名字)也没有提到 java.util.jar

【讨论】:

【参考方案3】:

OSGI 无疑是一种有效的方法。但是,假设您不需要卸载来重新加载插件,它可能是用锤子敲碎螺母。

您可以使用“java.util.jar”中的类扫描插件文件夹中的每个 JAR 文件,然后使用“java.net.URLClassLoader”加载正确的文件。

【讨论】:

听起来不错,我会试试看。干杯。【参考方案4】:

如果您“只”需要一个可插入的组件,那么只需根据元信息实例化类就足够了,例如通过类加载器从类路径或某个插件目录中的各种 jar 中读取 META-INF/ 信息。

另一方面,OSGi 提供了构建整个应用程序的方法。如果您已经有一个大型桌面应用程序需要一个部件可插拔,这将是一个陡峭的学习曲线。如果您对桌面应用程序一无所知,OSGi 提供了模块化整个应用程序的方法。它是关于“组件的隔离”和模块的独立性。

如果您想走 OSGi 通道,Apache Felix 提供了一个良好的开端。它可能看起来复杂而重量级,但这只是因为人们不习惯模块之间的那种隔离级别。过去调用任何公共方法都非常容易......

【讨论】:

【参考方案5】:

您是否考虑过使用 OSGi 作为插件框架?使用 OSGi,您可以按需更新/替换、加载或卸载您的模块。

【讨论】:

哈!分分钟打败你!不过实话说;你自己做过吗,或者像我一样,你认为它应该工作吗?

以上是关于向 J2SE 应用程序添加插件支持的最佳技术? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

打开 oracle 表单时出现问题,您必须安装 J2SE 插件版本

向 Web 公开 Cassandra REST API 的最佳方式是啥?

在 php 应用程序中支持分析的最佳实践是啥?

允许用户即时向其数据库添加列的最佳方式是啥? [关闭]

如何向 Eclipse 添加 FTP 支持?

如何向 google_map_location_picker 添加语言环境支持? (扑)