3

我制作了一个作用于 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 项目中的外部库类可见?

4

2 回答 2

1

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

于 2013-05-03T17:52:47.780 回答
1

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

于 2016-05-30T08:45:31.747 回答