0

在将应用程序部署为 Eclipse 插件时,我在使用 javassist 时遇到问题,具体来说,以下代码:

ClassPool.getDefault().get(aClassName);

正在抛出一个: javassist.NotFoundException

如果不用作插件的一部分,该代码可以正常工作。我试图了解问题是否出在我的插件的类路径配置中(似乎并非如此),或者与 Eclipse 在将插件项目作为 Eclipse 应用程序执行时使用的类加载器相关的问题。

触发问题的代码是自定义 Eclipse 编辑器的一部分。因此,当用户尝试打开与编辑器关联的文档时,它就会出现。javassist 试图加载的类是插件类的一部分。

提前感谢您提供任何线索!

4

1 回答 1

2

ClassPool的文档中:

返回默认的类池。返回的对象总是相同的,因为这个方法是一个单例工厂。

默认类池搜索系统搜索路径,通常包括平台库、扩展库、-classpath选项或CLASSPATH环境变量指定的搜索路径。

ClassPool返回的仅ClassPool.getDefault()添加系统类路径。Eclipse 插件不是由系统类加载器加载的,所以它不能看到你的插件的类。

您需要将插件的类加载器添加到类池中,以便它可以看到这些类。这可以通过以下方式完成:

ClassLoader pluginLoader = ...;
ClassPool pool = ClassPool.getDefault();
pool.appendClassPath(new LoaderClassPath(pluginLoader));

pluginLoader你的插件的类加载器在哪里。最简单的方法可能是通过

pluginLoader = <one of your plugin's classes>.class.getClassLoader();
于 2011-11-30T22:00:52.920 回答