Ошибка времени выполнения при использовании абстрактного синтаксического дерева Eclipse - PullRequest
5 голосов
/ 15 декабря 2009

Я пытаюсь использовать анализатор 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();
}
}

Кто-нибудь знает, почему это происходит?

Заранее спасибо,

Shirley

Ответы [ 3 ]

3 голосов
/ 03 февраля 2012

Недавно я столкнулся с подобной проблемой, и я постепенно начал исправлять одну зависимость за раз, и вот список требуемых зависимостей, с которыми я столкнулся. Я надеюсь, что это сэкономит время для людей, которые пытаются выполнить эту же задачу:

Список (соответствует изображению ниже):

  • ContentType (org.eclipse.core.contenttype)
  • Работа (org.eclipse.core.jobs)
  • Ресурсы (org.eclipse.core.resources)
  • Время выполнения (org.eclipse.core.runtime)
  • Равноденствие общее (org.eclipse.equinox.common)
  • Настройки равноденствия (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

3 голосов
/ 15 декабря 2009

Класс IResource отсутствует в вашем пути к классам при запуске приложения.

Если вы не используете Eclipse (или какой-либо другой инструмент) для управления зависимостями, вам придется отслеживать каждый файл jar, который требуется классам Абстрактного синтаксического дерева, и вручную включать их в путь к классам. Я не уверен точно, сколько это может быть, но Eclipse состоит из множества десятков плагинов, и ручная работа над зависимостями сборки будет рутиной.

Edit: чтобы добавить IResorce в путь к классам, конкретный файл JAR, который вы ищете, будет называться как org.eclipse.core.resources_3.5.0.v20090512.jar, в зависимости от вашей версии Eclipse. Но я не думаю, что это будет единственное, что вам нужно ...

0 голосов
/ 20 мая 2015

У меня была такая же проблема. Я решил добавить банки в необходимые зависимости в файле plugin.xml. Вы можете найти его во вкладке Зависимости файла plugin.xml.

...