Dynamically load a jar at runtime

A short post but I figured I would throw it up here before I lose my code. There are a couple of different ways that you can load jar’d code at runtime but here is a simple solution that I found to work very easily.

File myJar = new File("myJar.jar");
URL url = myJar.toURI().toURL();

Class<?>[] parameters = new Class[]{URL.class};

URLClassLoader sysLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();
Class sysClass = URLClassLoader.class;
try
{
    Method method = sysClass.getDeclaredMethod("addURL", parameters);
    method.setAccessible(true);
    method.invoke(sysLoader,new Object[]{ url });

    Constructor cs = ClassLoader.getSystemClassLoader().loadClass("com.example.MyClass").getConstructor(); 
    MyInterface instance = (MyInterface)cs.newInstance();
    instance.someFunction();
}
catch(Exception ex)
{
    System.err.println(ex.getMessage());
}

In the code example above the jar at the location pointed to by the url object is dynamically loaded and an instance of the class com.example.MyClass is created that conforms to a known interface MyInterface. This could be used in a situation where you are loading plugins that use a common interface example.