我制作了一个 eclipse插件,它作用于JavaProject。它需要访问项目类的字节码中包含的信息,因此,我使用URLClassLoader(告诉它类在项目的“bin”文件夹中)来获取对类的引用并检索所有我需要的信息。不幸的是,当我调用方法loadClass("a certain class in JavaProject")
时,我收到了这种类型的错误:
org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javassist/bytecode/BadBytecode
我发现这种错误是由于类加载器“未知”添加到JavaProject的 BuildPath 的外部库这些事实:JavaProject的类使用这些库的类< / p>
在前一个案例中使用了库javassist的 BadBytecode类 在这个JavaProject类的声明中
public static void main(String[] args) throws NotFoundException, BadBytecode, IOException, CannotCompileException{
那么如何让我的插件对导入java项目的外部库类可见?
答案 0 :(得分:1)
您可以使用JavaCore.create([IProject])API访问Java项目的构建路径,该API为您提供了一个具有API来遍历构建路径的IJavaProject。话虽如此,你绝对应该不这样做。 URLClassLoader没有重新加载现有类的概念,因此当用户编辑其代码时它永远不会看到更新版本,并且它倾向于锁定jar文件(例如构建路径上的文件)。 JDT具有安全遍历Java项目类型结构的API,不涉及使用类加载器。
答案 1 :(得分:0)
您必须在所选的java项目中获取类加载器,然后使用类加载器加载类。 Java项目的类加载器与eclipse插件中的类加载器不同。 请参阅以下链接中的详细代码: https://sdqweb.ipd.kit.edu/wiki/JDT_Tutorial:_Class_Loading_in_a_running_plugin