Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从单独的JAR动态加载抽象类和实现_Java - Fatal编程技术网

Java 从单独的JAR动态加载抽象类和实现

Java 从单独的JAR动态加载抽象类和实现,java,Java,我有一个java应用程序,它动态地从FS加载几个插件(.jar文件)。对于每个插件,我都使用以下代码: URLClassLoader cl = URLClassLoader.newInstance( new URL[] { jarFile } ); Class<?> loadedClass = cl.loadClass( PluginEntry ); BasePlugin plugin = (basePlugin)loadedClass.newInstance(); URLClas

我有一个java应用程序,它动态地从FS加载几个插件(.jar文件)。对于每个插件,我都使用以下代码:

URLClassLoader cl = URLClassLoader.newInstance( new URL[] { jarFile } );
Class<?> loadedClass = cl.loadClass( PluginEntry );
BasePlugin plugin = (basePlugin)loadedClass.newInstance();
URLClassLoader cl=URLClassLoader.newInstance(新URL[]{jarFile});
类loadedClass=cl.loadClass(插件);
BasePlugin=(BasePlugin)loadedClass.newInstance();
一切都好。我有两个插件继承同一个类,下面是一个结构: 接口BasePlugin->app.jar 抽象类BaseA实现BasePlugin->BaseA.jar B类扩展BaseA->pluginB.jar C类扩展BaseA->pluginC.jar

但是我需要给pluginB.jar和pluginC.jar都添加一个包,这就是问题所在。我想做的是从pluginB/C包中删除BaseA.jar,并在加载pluginB和pluginC之前从FS中动态加载BaseA.jar。 我试着这么做

URLClassLoader cl = URLClassLoader.newInstance( new URL[] { baseAjarFile } );
Class<?> loadedClass = cl.loadClass( PluginEntry );
URLClassLoader cl=URLClassLoader.newInstance(新URL[]{baseAjarFile});
类loadedClass=cl.loadClass(插件);
但是我不能用这个loaded类做任何事情。当应用程序加载pluginB/C时,它会失败,出现java.lang.NoClassDefFoundError异常。 那么,如何加载这个公共抽象基类并使其可用于pluginB/C呢?

试试看

URLClassLoader.newInstance( new URL[] { baseAjarFile }, cl);