Best way to build a Plugin system with Java

Sven Lilienthal picture Sven Lilienthal · Jan 21, 2009 · Viewed 96.1k times · Source

How would you implement a Plugin-system for your Java application?

Is it possible to have an easy to use (for the developer) system which achieves the following:

  • Users put their plugins into a subdirectory of the app
  • The Plugin can provide a configuration screen
  • If you use a framework, is the license compatible with commercial developement?

Answer

Bombe picture Bombe · Jan 21, 2009

First you need an interface that all plugins need to implement, e.g.

public interface Plugin {
    public void load(PluginConfiguration pluginConfiguration);
    public void run();
    public void unload();
    public JComponent getConfigurationPage();
}

Plugin authors should then bundle their plugins into JAR files. Your applications opens the JAR file and could then use an attribute from JAR manifest or the list of all files in the JAR file to find the class that implements your Plugin interface. Instantiate that class, the plugin is ready to go.

Of course you may also want to implement some kind of sandboxing so that the plugin is restricted in what it can and can not do. I have created a small test application (and blogged about it) that consists of two plugins, one of which is denied access to local resources.