Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java构建插件系统的最佳方法_Java_Design Patterns_Plugins_Frameworks_Plugin Architecture - Fatal编程技术网

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

用Java构建插件系统的最佳方法,java,design-patterns,plugins,frameworks,plugin-architecture,Java,Design Patterns,Plugins,Frameworks,Plugin Architecture,如何为Java应用程序实现插件系统 是否有可能拥有一个易于使用(对于开发者)的系统,该系统可实现以下功能: 用户将插件放入应用程序的子目录中 该插件可以提供一个配置屏幕 如果使用框架,许可证是否与商业开发兼容 使用 这是Eclipse插件系统的基础。是Eclipse的实现(许可的EPL)和Apache项目的实现(许可的Apache公共许可) Eclipse提供了一个具体的例子,OSGi可以涵盖您提到的要点(如果您想要完整的Eclipse/SWT/JFace堆栈,也可以在上面构建应用程序) 首先

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

是否有可能拥有一个易于使用(对于开发者)的系统,该系统可实现以下功能:

  • 用户将插件放入应用程序的子目录中
  • 该插件可以提供一个配置屏幕
  • 如果使用框架,许可证是否与商业开发兼容
    • 使用

      这是Eclipse插件系统的基础。是Eclipse的实现(许可的EPL)和Apache项目的实现(许可的Apache公共许可)


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

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

      public interface Plugin {
          public void load(PluginConfiguration pluginConfiguration);
          public void run();
          public void unload();
          public JComponent getConfigurationPage();
      }
      
      插件作者应该将插件捆绑到JAR文件中。应用程序打开JAR文件,然后可以使用JAR清单中的属性或JAR文件中所有文件的列表来查找实现插件接口的类。实例化该类,插件就可以运行了

      当然,您可能还希望实现某种沙盒,这样插件就可以做什么和不能做什么。我创建了一个由两个插件组成的小型(和)插件,其中一个插件被拒绝访问本地资源。

      还有。

      自1.6以来,如果您想编写自己的简单系统,可以使用它


      但是如果你想要的不仅仅是基本功能,那就使用现有的框架。

      我认为推荐OSGi解决上述问题是非常糟糕的建议。OSGi是“正确的选择”,但对于上述场景,我认为JPF或一些自主开发的极简框架就足够了。

      几年前,我开始了一个这样的项目,我希望很快就能准备好。我受到了NetBeans和Eclipse等项目的启发,但同时它也发生了一些变化。OSGi现在看起来是个不错的选择,但我没有机会将它与我的项目进行比较。它与上面提到的JPF相似,但同时在许多方面有所不同

      激发我的基本想法是尽可能容易地构建Java应用程序,而不将web应用程序、桌面应用程序或applet/JWS应用程序(当然这还不包括UI)作为核心功能进行分离

      我建立这个项目时有几个目标:

      • 无论您构建的是web应用程序还是桌面应用程序,您都应该以相同的方式启动应用程序,一个简单的main方法,没有花哨的web.xml声明(我并不反对使用标准web描述符,但它不适合于插件系统,在插件系统中添加“servlet”——我称它们为RequestHandler)-根据您的意愿动态调整)
      • 很容易在“扩展点”周围插入“扩展”——来自Eclipse的东西,但方法不同
      • 自部署,因为所有插件都已注册(XML文件),所以应用程序必须是独立于构建系统的自部署应用程序-当然,有一个Ant任务和一个Maven MOJO,它们是与ourside world的链接,但最终它调用应用程序并指示它在特定位置自部署自己
      • 借用Maven,它可以从存储库(包括Maven 1和2存储库)下载代码,因此只要您有权访问存储库,您的应用程序就可以作为单个小jar部署(有时很有用,基本上这提供了对自动更新的支持-您不喜欢web应用程序通知您有一个更新的版本,它已下载,只需要您的许可即可安装吗?我知道我很喜欢)
      • 关于系统运行状况的基本应用程序监控,故障时的电子邮件通知

        • 我在OSGi上工作了一周——紧张的一周,除了OSGi什么都没有。最后,这就像一场噩梦,但我学到了很多

          我能够让OSGi工作(不容易,所有的例子都过时了,网络上的所有东西都至少有三年的历史,如果不是五年的话),但是由于jar清单的问题,我很难将它集成到现有的项目中

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

          Neil Bartlett的博客文章是最大的帮助,但即使是那些未能获得工作系统的人(我从Felix教程中获取了一些代码,并将其拼凑起来,以使嵌入式框架运行起来).我找到了他几年前免费发布的书草稿,非常好,但是Eclipse中的示例不起作用,因为Eclipse OSGi支持发生了变化。

          使用。 它支持Web、Spring和Wicket。
          易于使用和构建应用程序

          我涉猎过OSGi,但从未找到一本真正好的入门书。如果有人能在这里推荐一些链接,那就太好了。我已经将equinox嵌入到我的应用程序中,并使用标准OSGi实践来做OP想要做的事情。在swing中也是如此,而不是SWT。WebStart也是。良好的入门资源:OSGi是理想的事实上的插件系统。然而,从标准Java到OSGi编程模型的飞跃是相当广泛的…这里有人使用JPF吗?听起来很有趣Jabref使用JPF作为其插件。工作非常好。我使用JPF,但它与Ant紧密结合。我想摆脱它,但我不知道它对我的应用程序有多大影响我为一个开源产品(OpenEMM)创建了一个JPF插件;我可以用maven实现它(