使用Eclipse Abstract Syntax Tree运行时错误

时间:2009-12-14 22:21:57

标签: java eclipse-jdt

我正在尝试在非插件环境中使用AST解析器。代码编译,但我得到以下运行时错误:

线程“main”中的异常java.lang.NoClassDefFoundError:org / eclipse / core / resources / IResource 在org.eclipse.jdt.core.dom.ASTParser。(ASTParser.java:189) 在org.eclipse.jdt.core.dom.ASTParser.newParser(ASTParser.java:118)

这是我正在运行的代码:

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.dom.*;

public class TestAST
{

private void runTest()
{
    String helloStr ="\n"+
    "public class HelloWorld {\n"+
    "\n"+
    "   private String name=\"\"\n\n"+
    "   /**\n"+
    "    * \n"+
    "    */\n"+
    "    public void sayHello() {\n"+
    "    System.out.println(\"Hello \"+name+\"!\");\n"+
    "    }\n"+
    "\n"+
    "}";

    ASTParser parser = ASTParser.newParser(AST.JLS3); 
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setSource(helloStr.toCharArray());
    parser.setResolveBindings(true);
    ASTNode tree = parser.createAST(null);
    tree.toString();

}

public static void main(String args[])
{
    TestAST ast = new TestAST();
    ast.runTest();
}
}

有谁知道为什么会这样?

提前致谢,

雪莉

3 个答案:

答案 0 :(得分:3)

启动应用程序时,IResource类不在类路径中。

如果您不使用Eclipse(或其他工具)来管理依赖项,那么您将不得不追踪抽象语法树类所需的每个jar文件,并手动将它们包含在类路径中。我不确定这可能有多少,但是Eclipse由许多插件组成,并且手动设计构建依赖项将是一件苦差事。

编辑:要将IResorce添加到类路径中,您要查找的特定jar文件将被称为org.eclipse.core.resources_3.5.0.v20090512.jar,具体取决于您的Eclipse版本。但我不认为这将是你唯一需要的......

答案 1 :(得分:3)

我最近遇到了类似的问题,我慢慢地逐步修复了一个依赖项,这里是我想出的必需依赖项列表。我希望为试图完成同样任务的人节省一些时间:

列表(与下图匹配):

  • ContentType(org.eclipse.core.contenttype)
  • Jobs(org.eclipse.core.jobs)
  • 资源(org.eclipse.core.resources)
  • 运行时(org.eclipse.core.runtime)
  • Equinox Common(org.eclipse.equinox.common)
  • Equinox偏好(org.eclipse.equinox.preferences)
  • JDT(org.eclipse.jdt)
  • JDT Core(org.eclipse.jdt.core)
  • OSGI(org.eclipse.osgi)
  • OSGI服务(org.eclipse.osgi.services)
  • OSGI Util(org.eclipse.osgi.util)

所有这些JAR可能已经包含在Eclipse插件目录中,您可以通过将它们添加为外部JAR来查找并将它们添加到构建路径中。

enter image description here

答案 2 :(得分:0)

我遇到了同样的问题。我解决了将jar添加到plugin.xml所需的依赖项中。您可以在plugin.xml文件的“依赖项”选项卡中找到它。