【发布时间】:2017-09-30 17:50:45
【问题描述】:
我正在尝试为现有应用程序创建 Java 插件。插件希望在主应用程序中重用许多已经存在的代码库(例如日志记录、错误处理等)。
我正在尝试将插件加载为 .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 以某种方式了解本地现有的类。这可能吗?如果是这样,我该怎么做?
【问题讨论】:
标签: java plugins dependencies classloader dependency-management