Делаю на основе http://voituk.kiev.ua/2008/01/14/java-plugins/
Написан интерфейс, простой, для понимания процесса:
Код | public interface Plugin_Interface{ public void invoke(); }
|
Далее два класса-плагина
Код | public class Plugin implements Plugin_Interface{ public void invoke() { System.out.println("I'm plugin A"); } }
|
и
Код | public class Plugin implements Plugin_Interface{ public void invoke() { System.out.println("I'm plugin B"); } }
|
Далее пытаюсь загрузить оба плагина:
Код | import java.io.*; import java.net.*;
public class Loader{ public static void main(String argv[]){ File pluginDir = new File("plugins"); File[] jars = pluginDir.listFiles( new FileFilter() { public boolean accept(File file) { return file.isFile() && file.getName().endsWith(".jar"); } } ); System.out.println(jars.length);
Class[] pluginClasses = new Class[jars.length];
for (int i = 0; i < jars.length; i++) { try { URL jarURL = jars[i].toURI().toURL(); URLClassLoader classLoader = new URLClassLoader(new URL[]{jarURL}); pluginClasses[i] = classLoader.loadClass("com.plugins.PluginA");
} catch (MalformedURLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } }
|
Сборка интерфейса, плагинов, класса Loader происходит без ошибок. Когда начинаю выполнять Loader, вылетает ошибка:
Код | C:\Projects\pluggable>java Loader 2 java.lang.ClassNotFoundException: com.plugins.PluginA at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at Loader.main(Loader.java:22) java.lang.ClassNotFoundException: com.plugins.PluginA at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at Loader.main(Loader.java:22)
|
или так:
Код | C:\Projects\pluggable>java -cp ..\Plugin_interface Loader Exception in thread "main" java.lang.NoClassDefFoundError: Loader
|
структура каталогов:
Код | Progects->pluggable ->Loader.java Progects->pluggable ->Loader.class Progects->pluggable ->plugins->PluginA.jar Progects->pluggable ->plugins->PluginB.jar Progects->Plugin_interface->Plugin_Interface.java Progects->Plugin_interface->Plugin_Interface.class
|
|