Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Eclipse插件中使用Javassist_Java_Eclipse_Eclipse Plugin_Classloader_Javassist - Fatal编程技术网

在Eclipse插件中使用Javassist

在Eclipse插件中使用Javassist,java,eclipse,eclipse-plugin,classloader,javassist,Java,Eclipse,Eclipse Plugin,Classloader,Javassist,在将应用程序部署为Eclipse插件时,我在使用javassist时遇到问题, 具体而言,以下代码: ClassPool.getDefault().get(aClassName); 正在抛出:javassist.NotFoundException 如果不作为插件的一部分使用,代码可以正常工作。 我试图了解问题是否出在我的插件的类路径的配置中(似乎不是这样),或者与Eclipse在作为Eclipse应用程序执行插件项目时使用的类加载器相关的东西 触发问题的代码是自定义Eclipse编辑器的一部分

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

ClassPool.getDefault().get(aClassName);
正在抛出:
javassist.NotFoundException

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

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

提前谢谢你提供任何线索

来自以下文件:

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

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

ClassPool.getDefault()
返回的
ClassPool
仅添加系统类路径。Eclipse插件不是由系统类加载器加载的,因此它将无法查看插件的类

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

ClassLoader pluginLoader = ...;
ClassPool pool = ClassPool.getDefault();
pool.appendClassPath(new LoaderClassPath(pluginLoader));
其中
pluginLoader
是插件的类加载器。最简单的方法可能是通过

pluginLoader = <one of your plugin's classes>.class.getClassLoader();
pluginLoader=