JavaSpringWebApp加载插件:ClassNotFoundException
我正在编写一个SpringWeb应用程序,它在运行时加载插件文件。这些插件是实现IPlugin
的类。但是,当在运行时加载插件时,我得到一个ClassNotFoundException
(IPlugin
找不到)
接口IPlugin
位于我的web应用程序的包中。为了构建插件,我将接口导出到一个jar文件,并将其包含在插件的构建路径中
在我的web应用程序中,使用URLClassLoader
加载插件:
URL fileUrl = jar.toURI().toURL();
String jarUrl = "jar: " + fileUrl + "!/";
URL[] urls = new URL[] {new URL(jarUrl)};
URLClassLoader loader = new URLClassLoader(urls);
IPlugin plugin = (IPlugin) Class.forName(clazz, true, loader).newInstance();
如何使接口在运行时可用
编辑:
如果我将包含IPlugin.class
的jar与插件一起加载,它确实可以工作。但这真的有必要吗
# 1 楼答案
我认为如果不在顶部导入,就无法使用IPlugin
只需带上IPlugin。使用相同的包名将java转换为您的代码,这没有错
您可以通过URLClassLoader直接使用完整文件路径加载JAR
请尝试以下代码
如果您有IPlugin,请尝试键入cast。在您的导入中使用java,这将起作用
否则,您需要使用反射
# 2 楼答案
我找到了解决方案,我必须像这样设置父类加载器:
new URLClassLoader(URLs, getClass().getClassLoader())
。在webapp中提供IPlugin
接口就足够了,在WEB-INF/lib中不需要额外的jar