eclipse插件中的类加载



我制作了一个作用于JavaProject的eclipse插件。它需要访问项目类的字节码中包含的信息,因此,我使用了URLClassLoader(对它说类位于项目的"bin"文件夹中)来获取对类的引用并检索所需的所有信息。不幸的是,当我调用方法loadClass("a certain class in JavaProject")时,我得到了以下类型的错误:

org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javassist/bytecode/BadBytecode

我发现这种错误是由于添加到JavaProject的BuildPath的外部库不被类加载器"知道":这些库的类被JavaProject的类使用

在前面的例子中,

使用了javassist库的BadBytecode类在JavaProject的一个类的语句

public static void main(String[] args) throws NotFoundException, BadBytecode, IOException, CannotCompileException{

那么我如何使我的插件对导入java项目的外部库的类可见?

您可以使用JavaCore访问Java项目的构建路径。create([IProject]) API,它给你一个IJavaProject,它有API来遍历构建路径。话虽如此,你绝对不应该这样做。URLClassLoader没有重新加载现有类的概念,因此当用户编辑其代码时,它永远不会看到更新的版本,并且它倾向于锁定jar文件(例如构建路径上的文件)。JDT具有用于安全遍历Java项目的类型结构的API,而不涉及使用类加载器。

您必须在选定的java项目中获得类加载器,然后使用类加载器来加载类。Java项目的类加载器与eclipse插件中的类加载器不同。详细代码见以下链接:https://sdqweb.ipd.kit.edu/wiki/JDT_Tutorial: _Class_Loading_in_a_running_plugin

相关内容

  • 没有找到相关文章

最新更新