我正在尝试使用Eclipse的AST解析器作为独立解析Java源文件。这是获取编译单元的一小段代码:
public CompilationUnit getCompilationUnit(ASTParser parser) {
parser.setResolveBindings(true);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
return cu;
}
如果我尝试独立执行此代码,即没有Eclipse IDE,我收到以下错误:
java.lang.NoSuchFieldError: resources
at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:2545) [org.eclipse.jdt.core_3.8.2.v20120814-155456.jar:]
at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:2423) [org.eclipse.jdt.core_3.8.2.v20120814-155456.jar:]
at org.eclipse.jdt.core.dom.ASTConverter.convert(ASTConverter.java:534) [org.eclipse.jdt.core_3.8.2.v20120814-155456.jar:]
我不知道它在哪里调用方法resources
。如果我尝试从Eclipse IDE运行它没有任何问题。我在类路径中包含了以下JAR文件:
org.eclipse.core.contenttype_3.4.200.v20120523-2004.jar
org.eclipse.core.jobs_3.5.300.v20120912-155018.jar
org.eclipse.core.resources_3.8.1.v20121114-124432.jar
org.eclipse.core.runtime_3.8.0.v20120912-155025.jar
org.eclipse.equinox.common_3.6.100.v20120522-1841.jar
org.eclipse.equinox.preferences_3.5.1.v20121031-182809.jar
org.eclipse.jdt.core_3.8.3.v20130121-145325.jar
org.eclipse.osgi_3.8.2.v20130124-134944.jar
我已经包含了所有必要的jar文件以便成功运行。但是当我运行这个错误发生时。有人可以指导我吗?
答案 0 :(得分:0)
我看不到谁调用getCompilationUnit
方法但是为了使用ASTParser
你必须设置单位名称和设置环境(正如我所说,我不确定你是否已经这样做了) ,以下代码段可能对您有所帮助:
// creating ASTParser
ASTParser parser = ASTParser.newParser(AST.JLS4);
// you probably want to set the kind
parser.setKind(ASTParser.K_COMPILATION_UNIT);
// you must set compilation unit name, so I just name it as a path to source file
parser.setUnitName(inputFilePath.toString());
// you must set environment params classpathEntries, sourcepathEntries, encodings, IncludeRunningVMBootclasspath
parser.setEnvironment(null, null, null, true);
// you probably want to set source
parser.setSource(fileContent);
// I can see that you actually want to do that :)
parser.setResolveBindings(true);
// creating compilation unit
CompilationUnit unit = (CompilationUnit) parser.createAST(null);
答案 1 :(得分:0)
我也遇到了类似的问题。
检查java版本与jar版本的兼容性。我正在使用Java8,所以使用下面的jar。
尝试使用最新的jar eclipse-astparser并且它有效。 :)