您将如何为Java应用程序实现插件系统?
是否可以使用易于使用(对于开发人员)系统,实现以下目标:
答案 0 :(得分:100)
首先,您需要一个所有插件都需要实现的接口,例如
public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public void run();
public void unload();
public JComponent getConfigurationPage();
}
然后,插件作者应将其插件捆绑到JAR文件中。您的应用程序打开JAR文件,然后可以使用JAR清单中的属性或JAR文件中所有文件的列表来查找实现Plugin接口的类。实例化该类,该插件已准备就绪。
当然,您可能还希望实现某种沙盒,以便插件受限于它能够做什么和不能做什么。我创建了一个小的test application(和blogged about it),它由两个插件组成,其中一个插件被拒绝访问本地资源。
答案 1 :(得分:40)
使用OSGi。
它是Eclipse插件系统的基础。 Equinox是Eclipse的实现(许可的EPL),Felix是Apache Project的实现(许可的Apache公共许可证)。
Eclipse提供了一个具体示例,OSGi可以涵盖您提到的要点(或者,如果您需要完整的Eclipse / SWT / JFace堆栈,则可以在Eclipse RCP之上构建应用程序)。
答案 2 :(得分:29)
从1.6开始,如果您想编写自己的简单系统,可以使用java.util.ServiceLoader。
但是,如果您想要的不仅仅是基本功能,请使用现有框架之一。
答案 3 :(得分:16)
答案 4 :(得分:13)
我在OSGi工作了一个星期 - 一个激烈的,只有OSGi周。最后它就像一个糟糕的梦,但我学到了很多东西。
我能够让OSGi工作(并不容易,所有示例都已过时,网上的所有内容都至少有三年,如果不是五年),但我很难将它集成到现有项目中,因为jar清单的问题。
简而言之,只有少数模糊的工具用于构建清单,而且它们没有很好的文档记录(BND工具很难模糊,但它是为Eclipse中的某个流程设计的)。此外,大多数可用的OSGi信息不针对具有现有桌面应用程序的应用程序开发人员。
这使得信息的大量背景模糊或不合适。 Neil Bartlett的博客文章是最大的帮助,但即使是那些未能获得工作系统的人(我从Felix教程中抓取了一些代码并拼凑起来以使嵌入式框架滚动)。我找到了他多年前免费发布的书籍草稿,非常好,但是由于Eclipse OSGi支持的变化,Eclipse中的示例无效。
每一步都是一个主要障碍。我稍后会尝试在此处发布更多详细信息。
答案 5 :(得分:13)
使用PF4J。 它支持Web,Spring和Wicket。 易于使用和构建应用程序
答案 6 :(得分:9)
我认为推荐OSGi来解决上述问题是非常糟糕的建议。 OSGi是“正确的选择”,但对于上面的情况,我认为无论是JPF还是一些本土的简约框架都足够了。
答案 7 :(得分:3)
多年前我开始了这样的项目,我希望很快就会做好准备。我受到了NetBeans和Eclipse等项目的启发,但同时它变成了一些不同的东西。 OSGi现在看起来是个不错的选择,但我没有机会将它与我的项目进行比较。它与上面提到的JPF类似,但同时在很多方面都有所不同。
激励我的基本想法是尽可能简单地构建Java应用程序,Web应用程序,桌面应用程序或applet / JWS应用程序之间没有分离(当然这不包括用户界面)核心功能。
我在脑海中建立了一些目标: