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

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

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

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

答案 1

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

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

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

当然,您可能还希望实现某种沙盒,以便插件在可以做什么和不能做什么方面受到限制。我创建了一个小型测试应用程序(并写了关于它的博客),它由两个插件组成,其中一个被拒绝访问本地资源。


答案 2

使用 OSGi

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

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


推荐