Implementing dynamic plugins in Java

后端 未结 5 1920
心在旅途
心在旅途 2021-01-31 10:45

I\'d like to implement a dynamic plugin feature in a Java application. Ideally:

  • The application would define an interface Plugin with a method like
5条回答
  •  旧时难觅i
    2021-01-31 11:41

    This is actually quite easy using plain Java means:

    Since you don't want the user to configure the classpath before starting the application, I would first create a URLClassLoader with an array of URLs to the files in your plugin directory. Use File.listFiles to find all plugin jars and then File.toURI().toURL() to get a URL to each file. You should pass the system classloader (ClassLoader.getSystemClassLoader()) as a parent to your URLClassLoader.

    If the plugin jars contain a configuration file in META-INF/services as described in the API documentation for java.util.ServiceLoader, you can now use ServiceLoader.load(Plugin.class, myUrlClassLoader) to obatin a service loader for your Plugin interface and call iterator() on it to get instances of all configured Plugin implementations.

    You still have to provide your own wrapper around this to filter plugin capabilites, but that shouldn't be too much trouble, I suppose.

提交回复
热议问题