0

我有一个正在编写的 Java 控制台应用程序,我希望人们能够为它编写插件,然后将这些插件作为 jar 分发。我希望用户能够将插件(jar)放入“插件”文件夹,重新启动应用程序,并加载并运行插件。我不希望用户必须为插件或类似的东西指定一个类/方法来执行。

我可以将带有通配符类路径的 jar 加载到“插件”目录,但我需要一些方法让这些插件通过运行register()每个插件需要在某处定义的方法来向应用程序注册自己。插件(jar)如何指定register()定义它的方法的位置(包和类),以便我的应用程序知道调用它?

我意识到 OSGi 可以做到这一点,但这是一个相当小的应用程序,如果存在更简单的解决方案,我宁愿不使用 OSGi。

背景:

这些插件从他们想要处理的应用程序中注册事件。用户将能够在每个插件的基础上禁用特定事件的处理,因此这些插件的配置将存储在应用程序的数据库中。当插件注册自己时,应用程序将检查数据库以查看该插件是否存在配置,如果不存在,它将在数据库中为其创建新的默认配置。

4

3 回答 3

2

为您的应用程序定义一个清单文件以标准化此行为。您可以将其实现为属性文件、XML 或您选择的任何格式。清单文件将包含一个标准属性名称,其值为插件的“启动类”。让用户从您定义的接口或抽象类扩展此启动类,以便您可以强制执行预期的行为(也就是具有“注册”方法)。

然后,最终用户将他们的类文件和清单捆绑到一个 JAR 中,并将其分发到应用程序的插件文件夹中。

OSGI 绝对适合这个,你看过Concierge吗?它的部署尺寸小得离谱。

于 2011-08-05T21:11:05.983 回答
0

还有一个帖子,你可能会觉得有帮助

我应该如何在运行时动态加载 Jars?

还可以尝试查看Jar 类加载器

于 2011-11-01T10:04:57.920 回答
0

大概您的注册方法是插件接口的一部分?

如果是这样,您可以实现自定义 ClassLoader 来检测实现此接口的类。然后随后使用基于侦听器的方法来通知管理您的插件的任何对象类的存在。

于 2011-08-05T21:14:23.450 回答