Java 向J2SE应用程序添加插件支持的最佳技术?

Java 向J2SE应用程序添加插件支持的最佳技术?,java,plugins,plugin-architecture,Java,Plugins,Plugin Architecture,我正在编写一个J2SE桌面应用程序,它要求它的一个组件是可插入的。我已经为这个插件定义了Java接口。用户应该能够在运行时(通过GUI)选择他们想要使用的该界面的哪个实现(例如在初始化对话框中)。我设想将每个插件打包为一个JAR文件,其中包含实现类以及它可能需要的任何帮助器类 在桌面Java应用程序中执行此类操作的最佳技术是什么?我正在考虑的一种方法是让我的应用程序启动一个轻量级OSGi容器,如果我理解正确,它将能够发现指定文件夹中存在哪些插件JAR文件,这反过来会让我列出它们供用户选择。这是否

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


在桌面Java应用程序中执行此类操作的最佳技术是什么?

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


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

您想过将OSGi用作插件框架吗?使用OSGi,您可以根据需要更新/替换、加载或卸载模块。

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

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


ApacheFelix为您提供了一个良好的开端,如果您想进入OSGi通道的话。它可能看起来复杂而沉重,但这只是因为它不习惯模块之间的隔离级别。以前调用任何公共方法都很容易…

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


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

在多次尝试基于插件的java体系结构之后(这正是您想要的),我终于找到了Java5代码的最佳解决方案。它没有像OSGI那样的解决方案的巨大需求,而是相当容易使用。

Hah!比你快一分钟!但认真地说;这是你自己做的吗?或者像我一样,这是你认为应该奏效的吗?听起来不错,我会试试看。干杯。我去了项目现场,观看了演示视频;JSPF看起来很容易使用,这正是我想要的!非常感谢。JSPF对你有什么帮助?我创建了一个反馈线程:我还没有使用它,但一旦我使用了它,我会在这里发帖。