Ich versuche, die AST-Generation-Funktion der JDT in einer nicht-Eclipse-Umgebung (als ein Plugin für eine andere grundlegende Java-IDE) zu verwenden. Mein Programm erstellt die AST richtig, wenn ich es in Eclipse laufen, aber wenn ich das Plugin testen Sie es aus dem ide bekomme ich diese Ausnahme:Ausnahme bei der Generierung von AST mit Eclipse JDT SDK in einer Nicht-Eclipse-Umgebung
Exception in thread "AWT-EventQueue-0" java.lang.NoSuchFieldError: ignoreMethodBodies
at org.eclipse.jdt.core.dom.CompilationUnitResolver.parse(CompilationUnitResolver.java:491)
at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1200)
at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java :807)
at mytreetest.TreeMaker.buildTree(Unknown Source)
...
(further stack trace)
...
Der Code, den ich verwendet habe, ist recht einfach:
-Code :
ASTParser parser = ASTParser.newParser(AST.JLS4);
String src = readFile(filePath);
parser.setSource(src.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
Map<String, String> options = JavaCore.getOptions();
JavaCore.setComplianceOptions(JavaCore.VERSION_1_7, options);
parser.setCompilerOptions(options);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
ich ging durch den Quellcode org.eclipse.jdt.core.dom.CompilationUnitResolver und org.eclipse.jdt.internal.compiler.impl.CompilerOptions. CompilerOptions hat ein öffentliches boolesches Feld namens ignoreMethodBodies.
Was kann diesen Fehler verursachen?
Bitte helfen Sie mir.
Hier sind die Eclipse-JAR-Dateien I aufgenommen haben:
org.eclipse.core.contenttype_3.4.100.v20110423-0524.jar
org.eclipse.core.jobs_3.5.100.v20110404.jar
org.eclipse.core.resources_3.7100.v20110510-0712.jar
org.eclipse.core.runtime_3.7.O.v20110110.jar
org.eclipse.equinoxcommon_3.6.O.v20110523.jar
org.eclipse.equinox.preferences_3.4.1.R37x_v20110725.jar
org.eclipse.jdt.compiler.apt_1.O.400.v0110816-0800.jar
org.eclipse.jdt.compiler.tooLl.O.100.v_B76_R37x.jar
org.edipse.jdt.core_3.7.1.v_B76_R37x.jar
org.eclipse.jface3.7.0J20110522-1430.jar
org.eclipse.osgi_3.7.1.R37x_v20110808-1106.jar
org.eclipse.osgi.utiL3.2.200.v20110110.jar
org.eclipse.text3.5101 .r371y20110810-O800jar
UPDATE:
ich die Lösung für dieses gefunden haben. Die Java-ID, von der ich diesen Code ausführte, verwendete ecj. Das Problem war, dass ecj.jar mit den jdt-Core-Modulen kollidierte, die ich mit meinem Plugin hinzugefügt hatte. Das Ersetzen des IDE-ecj durch jdt-core (org.eclipse.jdt.core_XX.XX.jar und den Rest der jars) und das Aktualisieren seines Klassenpfads löste das Problem.
Ist der komplette Stack-Trace ähnlich dem in http://stackoverflow.com/questions/9961588/java-lang-nosuchfielderror-ignoremethodbodies-exception-while-creating-ast? –
Ja, ich fand den Fehler nach dem Posten in den Eclipse-Foren http://www.eclipse.org/forums/index.php/m/835729/#msg_835729 –