2011-11-30 70 views
0

我作为Eclipse插件部署应用程序时使用了Javassist具有问题使用了Javassist, 具体而言,下面的代码:在Eclipse插件

ClassPool.getDefault().get(aClassName); 

是扔一个:。

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

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

在此先感谢您的任何线索!

回答

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();