通过属性文件的java插件规范

通过属性文件的java插件规范,java,plugins,Java,Plugins,我有一个项目,我想添加插件。我有所有的接口/工厂等。设置(我的网关接口称为ApplicationMonitorFactory),我只需要找到一种方法来定位/激活插件。我的配置文件是一个java属性文件 我想我需要做的是: 找到一种指定一组或多个插件的好方法 对于每个插件,运行它 1.找到一种指定一组或多个插件的好方法 比如: application.plugins=foo-monitor.jar,bar-monitor.jar 我认为最好指定一个jar文件列表;对于指定的每个jar文件,其含

我有一个项目,我想添加插件。我有所有的接口/工厂等。设置(我的网关接口称为
ApplicationMonitorFactory
),我只需要找到一种方法来定位/激活插件。我的配置文件是一个java属性文件

我想我需要做的是:

  • 找到一种指定一组或多个插件的好方法
  • 对于每个插件,运行它

  • 1.找到一种指定一组或多个插件的好方法 比如:

    application.plugins=foo-monitor.jar,bar-monitor.jar
    
    我认为最好指定一个jar文件列表;对于指定的每个jar文件,其含义是它包含一个或多个实现
    ApplicationMonitorFactory
    的类,这些类将被实例化。(我还可以添加注释
    @ApplicationMonitorPlugin
    ,以便.jar文件可以有一个未实例化的测试ApplicationMonitorFactory)

    这听起来合理吗?


    2.对于每个插件,运行它
    我以前做过一次,如果我没记错的话,我想我需要使用一个自定义类加载器来动态地将适当的.jar文件添加到类路径中。或者有更简单的方法吗?

    我可以建议改用OSGI吗?如果它是一个服务器端项目,那么类似的东西在插件部署和规范方面为您提供了很多现成的东西

    根据您目前的情况回答问题:

    1.找到一种指定一组或多个插件的好方法 属性文件方法很好。如果您想进行热部署,您可能只希望能够将插件放入您监视的文件夹中。一个插件只有一个jar文件,这就限制了插件开发人员将所有依赖项打包到一个jar文件中(maven shade插件对此很有用)。注释方法应该有效(Servlet3.0使用的方法)。使用OSGI,您将拥有一个带有Bundle Activator属性的清单文件,该属性将引用应该实例化的插件类

    2.对于每个插件,运行它 是的,您需要为Jar文件启动一个类加载器。这就是事情变得有点棘手的地方。这很容易做到,但是类加载有各种各样的问题。这正是OSGI真正有帮助的地方,尽管这有点前期成本