【问题标题】:Exception while generating AST using Eclipse JDT SDK in a non-eclipse environment在非 Eclipse 环境中使用 Eclipse JDT SDK 生成 AST 时出现异常
【发布时间】:2012-04-03 14:20:14
【问题描述】:

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

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

更新:

我已经找到了解决方法。我运行此代码的 java-ide 使用的是 ecj。问题是 ecj.jar 与我在插件中包含的 jdt-core 模块发生冲突。用 jdt-core(org.eclipse.jdt.core_XX.XX.jar 和其余 jars) 替换 ide 的 ecj 并更新其类路径解决了问题。

【问题讨论】:

标签: java eclipse abstract-syntax-tree eclipse-jdt


【解决方案1】:

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

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

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

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

现在一切似乎都正常了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2014-02-02
    相关资源
    最近更新 更多