2012-04-03 92 views
0

我试图在非eclipse环境中使用jdt的AST生成功能(作为另一个基本Java IDE的插件)。我的程序正确地创建AST当我运行它在Eclipse中,但是当我测试该插件是从IDE我得到这个异常:在非eclipse环境中使用Eclipse JDT SDK生成AST时的异常

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) 
... 

我使用的代码非常简单:

代码:

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); 

我通过org.eclipse.jdt.core.dom.CompilationUnitResolver和org.eclipse.jdt.internal.compiler.impl.CompilerOptions的源代码去了。 CompilerOptions确实有一个名为ignoreMethodBodies的公共布尔字段。

什么可能导致此错误?

请帮我一把。

这里是我已经包括了Eclipse jar文件:

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:

我已经找到了修复这一点。我运行这个代码的java-ide使用ecj。问题在于ecj.jar与我插件中包含的jdt-core模块冲突。用jdt-core(org.eclipse.jdt.core_XX.XX.jar和其他jar包)替换IDE的ecj并更新其classpath解决了这个问题。

+0

是完整的堆栈跟踪类似于http://stackoverflow.com/questions/9961588/java-lang-nosuchfielderror-ignoremethodbodies-exception-while-creating-ast? – 2012-04-03 15:12:05

+0

是的,我在日食论坛上发布了修复后发现http://www.eclipse.org/forums/index.php/m/835729/#msg_835729 – 2012-04-03 17:10:02

回答

1

我用JDT是一个动态web项目,并得到了同样的错误。

感谢Manindra Moharana的回答,我找出了错误的原因。

起初,我将“Apache Tomcat 6.0”服务器库添加到类路径中。 不幸的是,Tomcat也使用ecj,它与jdt.core中的CompilerOptions类冲突。

所以解决方案是从类路径中删除Tomcat服务器库。

现在一切都好了。