public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public void run();
public void unload();
public JComponent getConfigurationPage();
}
它没有't matter if you build a web application or a desktop application you should start the application in the same way, a plain main method, No fancy web.xml declaration(not that I' m反对拥有一个标准的Web描述符,但它不适合插件系统,你添加"servlets" - 我称之为RequestHandler(s) - 动态随意) .
8 回答
首先,您需要一个所有插件都需要实现的接口,例如
插件作者然后应该将他们的插件捆绑到JAR文件中 . 您的应用程序打开JAR文件,然后可以使用JAR清单中的属性或JAR文件中所有文件的列表来查找实现插件接口的类 . 实例化该类,该插件已准备就绪 .
当然,您可能还希望实现某种沙盒,以便插件受限于它能够做什么和不能做什么 . 我创建了一个小的test application(和blogged about it),它包含两个插件,其中一个插件被拒绝访问本地资源 .
使用OSGi .
它是Eclipse插件系统的基础 . Equinox是Eclipse的实现(许可的EPL),Felix是Apache Project的实现(许可的Apache公共许可证) .
Eclipse提供了一个具体的例子,OSGi可以涵盖你提到的要点(或者如果你想要一个完整的Eclipse / SWT / JFace堆栈,你可以在Eclipse RCP之上构建你的应用程序) .
从1.6开始,如果你想编写自己的简单系统,可以使用java.util.ServiceLoader .
但是,如果您需要的不仅仅是基本功能,请使用现有框架之一 .
还有JPF (Java Plugin Framework) .
我在OSGi上工作了一个星期 - 一个激烈的,只有OSGi周 . 最后,这就像一个糟糕的梦想,但我学到了很多东西 .
我能够让OSGi工作(不容易,所有的例子都已经过时了,网上的一切都至少有三年,如果不是五年),但由于问题导致我将其集成到现有项目中,我遇到了很大的麻烦 . jar 清单 .
简而言之,只有少数模糊的工具用于构建清单,并且它们没有很好的文档记录(BND工具很难模糊,但它是为Eclipse中的某个进程设计的) . 此外,大多数可用的OSGi信息不针对具有现有桌面应用程序的应用程序开发人员 .
这使得信息的大量背景模糊或不合适 . Neil Bartlett的博客文章是最大的帮助,但即使是那些未能获得工作系统的人(我从Felix教程中抓取了一些代码并拼凑起来以使嵌入式框架滚动) . 我找到了他多年前免费发布的书籍草稿,非常好,但是由于Eclipse OSGi支持的变化,Eclipse中的示例不起作用 .
每一步都是一个主要障碍 . 我稍后会尝试在此处发布更多详细信息 .
使用PF4J . 它支持Web,Spring和Wicket . 易于使用和构建应用程序
我认为推荐OSGi来解决上述问题是非常糟糕的建议 . OSGi是“正确的选择”,但对于上面的情况,我认为无论是JPF还是一些本土的简约框架都足够了 .
多年前我开始了这样的项目,我希望很快就会做好准备 . 我受到了NetBeans和Eclipse等项目的启发,但同时它变成了一些不同的东西 . OSGi现在看起来是个不错的选择,但我没有机会将它与我的项目进行比较 . 它与上面提到的JPF类似,但同时在很多方面都有所不同 .
激励我的基本思想是尽可能简单地构建Java应用程序,Web应用程序,桌面应用程序或applet / JWS应用程序之间没有分离(当然,这还不包括UI)作为核心功能 .
我在脑海中 Build 了一些目标:
它没有't matter if you build a web application or a desktop application you should start the application in the same way, a plain main method, No fancy web.xml declaration(not that I' m反对拥有一个标准的Web描述符,但它不适合插件系统,你添加"servlets" - 我称之为RequestHandler(s) - 动态随意) .
容易插入"extensions"围绕"extension point" - 来自Eclipse的东西,但是一种不同的方法 .
可自行部署,因为所有插件都已注册(XML文件),应用程序必须可独立于构建系统自行部署 - 当然有一个Ant任务和一个Maven MOJO,它们是与我们世界的链接,但是最后它调用应用程序并指示它在特定位置自行部署 .
从Maven借来的,它可以从存储库(包括Maven 1和2存储库)下载代码,这样只要您有权访问存储库,您的应用程序就可以部署为一个小jar(有时可用,基本上这可以为auto提供支持) - 更新 - 你不喜欢你的网络应用程序通知有一个更新的想法版本,它已下载,只需要您的许可才能安装它?我知道我喜欢那个) .
基本应用程序监控系统运行状况,发生故障时的电子邮件通知