0

我决定让我的 Java 桌面应用程序可以使用插件进行扩展。加载插件的过程如下:应用程序在特定目录中搜​​索插件jar文件及其描述名称、版本、主类等的描述符,使用URLClassLoader将此插件加载到应用程序中。在这种情况下,插件和应用程序必须连接一个 API,用于插件和应用程序之间的交互。

我实现了这个并开始测试。在这种情况下,应用程序、插件、API 使用 Maven

API 以这种方式连接到应用程序和插件:

<dependency>
<groupId>name</groupId>
<artifactId>api name</artifactId>
<version>api version</version>
<scope>system</scope>
<systemPath>${basedir}/api.jar</systemPath>

我将插件加载到应用程序中,如下所示:

loader = new URLClassLoader(new URL[] {info.getPluginJar().toURI().toURL()}, ClassLoader.getSystemClassLoader()); 
plugin = (Plugin) loader.loadClass(info.getMainClass()).newInstance();

但是在启动时,出现错误:

线程“main”中的异常 java.lang.NoClassDefFoundError: name/package/PluginContext
原因:java.lang.ClassNotFoundException: name.package.PluginContext

我了解该应用程序看不到插件内使用的 API 类。在这种情况下该怎么办,我不知道。

4

0 回答 0