我有一个项目,我想添加插件。我有所有接口/工厂/等。设置(我的网关接口称为ApplicationMonitorFactory
),我只需要找到一种方法来定位/激活插件。我的配置文件是一个java属性文件。
我认为我需要做的是:
类似的东西:
application.plugins=foo-monitor.jar,bar-monitor.jar
我想也许最好指定一个jar文件列表;对于指定的每个jar文件,其含义是它包含一个或多个实现ApplicationMonitorFactory
的类,并且这些类将被实例化。 (我可能还会添加一个注释@ApplicationMonitorPlugin
,以便.jar文件可以有一个未实例化的测试ApplicationMonitorFactory)
听起来合理吗?
我曾经做过一次,如果我没记错,我想我需要使用自定义类加载器动态地将相应的.jar文件添加到类路径中。或者有更简单的方法吗?
答案 0 :(得分:1)
我可以建议使用OSGI吗?如果它是一个服务器端项目,Apache Karaf之类的内容在插件部署和规范方面为您提供了很多开箱即用。
根据您目前的情况回答问题:
属性文件方法很好。如果要进行热部署,您可能希望能够将插件放入您监视的文件夹中。只有一个插件的jar文件会限制插件开发人员将所有依赖项打包到一个jar文件中(maven shade插件对此很有用)。注释方法应该有效(Servlet 3.0使用的方法)。使用OSGI,您将拥有一个带有Bundle-Activator属性的清单文件,该属性将引用应该实例化的插件类。
是的,您需要为Jar文件启动类加载器。这是事情变得有点毛茸茸的地方。它很容易做到但是类加载有各种各样的问题。这是OSGI真正帮助的地方,尽管这是一个前期成本。