我有一个java应用程序,它动态地从FS加载几个插件(.jar文件)。对于每个插件,我使用这样的代码:
URLClassLoader cl = URLClassLoader.newInstance( new URL[] { jarFile } );
Class<?> loadedClass = cl.loadClass( PluginEntry );
BasePlugin plugin = (basePlugin)loadedClass.newInstance();
一切都好。我有2个插件继承了同一个类,这里是一个结构: interface BasePlugin - &gt; app.jar 抽象类BaseA实现BasePlugin - &gt; baseA.jar B类延伸BaseA - &gt; pluginB.jar C类延伸BaseA - &gt; pluginC.jar
但我需要将baseA包放到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 );
但我无法对该loadedClass做任何事情。当App加载pluginB / C时,它失败并出现java.lang.NoClassDefFoundError异常。 那么如何加载这个常见的抽象基类并使其可用于pluginB / C?
答案 0 :(得分:0)
尝试
URLClassLoader.newInstance( new URL[] { baseAjarFile }, cl);