2012-04-03 9 views
0

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.

+0

Ist der komplette Stack-Trace ähnlich dem in http://stackoverflow.com/questions/9961588/java-lang-nosuchfielderror-ignoremethodbodies-exception-while-creating-ast? –

+0

Ja, ich fand den Fehler nach dem Posten in den Eclipse-Foren http://www.eclipse.org/forums/index.php/m/835729/#msg_835729 –

Antwort

1

Ich verwendete JDT ist ein dynamisches Web-Projekt und bekam den gleichen Fehler.

Dank der Antwort von Manindra Moharana, zitiere ich die Ursache des Fehlers.

Zuerst habe ich die "Apache Tomcat 6.0" Serverbibliothek zum Klassenpfad hinzugefügt. Leider verwendet Tomcat auch ecj, die mit der CompilerOptions-Klasse in jdt.core kollidieren.

Die Lösung ist also die Tomcat-Server-Bibliothek aus dem Klassenpfad zu entfernen.

Und jetzt scheint alles in Ordnung zu sein.

Verwandte Themen