2
我正在嘗試爲現有應用程序創建Java插件。插件希望在主應用程序中重新使用很多已經存在的代碼庫(例如日誌記錄,錯誤處理等)。如何讓java ClassLoader知道可用的類?
我試圖加載的插件,.jar
文件是這樣的:
String localPath = "...";
String pluginName = "...";
File jarFile = new File(localPath);
ClassLoader pluginLoader = URLClassLoader.newInstance(new URL[]{jarFile.toURL()});
pluginLoader.loadClass(pluginName).newInstance();
我遇到的問題是,類我想插件裏面導入無法找到,即使它們在存在主要的應用程序,我得到象這樣的錯誤:
NoClassDefFoundError: com/foo/exception/FooException
at com.foo.plugins.PluginManager.loadPlugin(PluginManager.java:187)
at com.foo.plugins.PluginManager.loadPlugins(PluginManager.java:86)
...
com/foo/exception/FooException
在代碼中到處使用,但我不希望有包括在插件jar文件這個類(和許多許多其他)。相反,我想ClassLoader
以某種方式意識到本地存在的類。這可能嗎?如果是這樣,我該怎麼做?