首页 文章

使用Java构建插件系统的最佳方法

提问于
浏览
135

您将如何为Java应用程序实现插件系统?

是否可以有一个易于使用(对于开发人员)系统,实现以下目标:

  • 用户将他们的插件放入应用程序的子目录中

  • 插件可以提供配置屏幕

  • 如果您使用框架,许可证是否与商业开发兼容?

8 回答

  • 3

    首先,您需要一个所有插件都需要实现的接口,例如

    public interface Plugin {
        public void load(PluginConfiguration pluginConfiguration);
        public void run();
        public void unload();
        public JComponent getConfigurationPage();
    }
    

    插件作者然后应该将他们的插件捆绑到JAR文件中 . 您的应用程序打开JAR文件,然后可以使用JAR清单中的属性或JAR文件中所有文件的列表来查找实现插件接口的类 . 实例化该类,该插件已准备就绪 .

    当然,您可能还希望实现某种沙盒,以便插件受限于它能够做什么和不能做什么 . 我创建了一个小的test application(和blogged about it),它包含两个插件,其中一个插件被拒绝访问本地资源 .

  • 13

    使用OSGi .

    它是Eclipse插件系统的基础 . Equinox是Eclipse的实现(许可的EPL),Felix是Apache Project的实现(许可的Apache公共许可证) .

    Eclipse提供了一个具体的例子,OSGi可以涵盖你提到的要点(或者如果你想要一个完整的Eclipse / SWT / JFace堆栈,你可以在Eclipse RCP之上构建你的应用程序) .

  • 29

    从1.6开始,如果你想编写自己的简单系统,可以使用java.util.ServiceLoader .

    但是,如果您需要的不仅仅是基本功能,请使用现有框架之一 .

  • 9
  • 10

    我在OSGi上工作了一个星期 - 一个激烈的,只有OSGi周 . 最后,这就像一个糟糕的梦想,但我学到了很多东西 .

    我能够让OSGi工作(不容易,所有的例子都已经过时了,网上的一切都至少有三年,如果不是五年),但由于问题导致我将其集成到现有项目中,我遇到了很大的麻烦 . jar 清单 .

    简而言之,只有少数模糊的工具用于构建清单,并且它们没有很好的文档记录(BND工具很难模糊,但它是为Eclipse中的某个进程设计的) . 此外,大多数可用的OSGi信息不针对具有现有桌面应用程序的应用程序开发人员 .

    这使得信息的大量背景模糊或不合适 . Neil Bartlett的博客文章是最大的帮助,但即使是那些未能获得工作系统的人(我从Felix教程中抓取了一些代码并拼凑起来以使嵌入式框架滚动) . 我找到了他多年前免费发布的书籍草稿,非常好,但是由于Eclipse OSGi支持的变化,Eclipse中的示例不起作用 .

    每一步都是一个主要障碍 . 我稍后会尝试在此处发布更多详细信息 .

  • 40

    使用PF4J . 它支持Web,Spring和Wicket . 易于使用和构建应用程序

  • 95

    我认为推荐OSGi来解决上述问题是非常糟糕的建议 . OSGi是“正确的选择”,但对于上面的情况,我认为无论是JPF还是一些本土的简约框架都足够了 .

  • 16

    多年前我开始了这样的项目,我希望很快就会做好准备 . 我受到了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提供支持) - 更新 - 你不喜欢你的网络应用程序通知有一个更新的想法版本,它已下载,只需要您的许可才能安装它?我知道我喜欢那个) .

    • 基本应用程序监控系统运行状况,发生故障时的电子邮件通知

相关问题