javapluginsplugin-architecture

How to create a pluginable Java program?


I want to create a Java program that can be extended with plugins. How can I do that and where should I look for?

I have a set of interfaces that the plugin must implement, and it should be in a jar. The program should watch for new jars in a relative (to the program) folder and registered them somehow.


Although I do like Eclipse RCP, I think it's too much for my simple needs.

Same thing goes for Spring, but since I was going to look at it anyway, I might as well try it.

But still, I'd prefer to find a way to create my own plugin "framework" as simple as possible.


Solution

  • I've done this for software I've written in the past, it's very handy. I did it by first creating an Interface that all my 'plugin' classes needed to implement. I then used the Java ClassLoader to load those classes and create instances of them.

    One way you can go about it is this:

    File dir = new File("put path to classes you want to load here");
    URL loadPath = dir.toURI().toURL();
    URL[] classUrl = new URL[]{loadPath};
    
    ClassLoader cl = new URLClassLoader(classUrl);
    
    Class loadedClass = cl.loadClass("classname"); // must be in package.class name format
    

    That has loaded the class, now you need to create an instance of it, assuming the interface name is MyModule:

    MyModule modInstance = (MyModule)loadedClass.newInstance();