使用Java构建插件系统的最佳方法
2022-08-31 07:30:41
您将如何为您的Java应用程序实现插件系统?
是否有可能有一个易于使用(对于开发人员)的系统,从而实现以下目标:
- 用户将其插件放入应用程序的子目录中
- 插件可以提供配置屏幕
- 如果您使用框架,许可证是否与商业开发兼容?
您将如何为您的Java应用程序实现插件系统?
是否有可能有一个易于使用(对于开发人员)的系统,从而实现以下目标:
首先,您需要一个所有插件都需要实现的接口,例如:
public interface Plugin {
public void load(PluginConfiguration pluginConfiguration);
public void run();
public void unload();
public JComponent getConfigurationPage();
}
然后,插件作者应将其插件捆绑到JAR文件中。您的应用程序打开 JAR 文件,然后可以使用 JAR 清单中的属性或 JAR 文件中所有文件的列表来查找实现插件接口的类。实例化该类,插件已准备就绪。
当然,您可能还希望实现某种沙盒,以便插件在可以做什么和不能做什么方面受到限制。我创建了一个小型测试应用程序(并写了关于它的博客),它由两个插件组成,其中一个被拒绝访问本地资源。
使用 OSGi。
它是 Eclipse 插件系统的基础。Equinox是Eclipse的实现(许可的EPL),Felix是Apache项目的实现(许可的Apache公共许可证)。
Eclipse提供了一个具体的例子,OSGi可以涵盖你提到的要点(或者如果你想要一个完整的Eclipse/SWT/JFace堆栈,你可以在Eclipse RCP之上构建你的应用程序)。