【问题标题】:java.lang.NoSuchFieldError: resources - Eclipse AST parser errorjava.lang.NoSuchFieldError: 资源 - Eclipse AST 解析器错误
【发布时间】:2017-10-05 20:34:53
【问题描述】:

我正在尝试单独使用 Eclipse 的 AST 解析器来解析 Java 源文件。这是一段获取编译单元的小sn-p代码:

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 文件。但是当我运行这个错误发生。谁能指导一下?

【问题讨论】:

  • 您不能只在 Eclipse 之外使用 Eclipse 插件,它们依赖于 Eclipse 完成的所有初始化。您需要编写一个 Eclipse 无头应用程序。
  • 但是AST解析器是独立于eclipse的,很多人都试过成功并且可以运行。这是ingegno.it/programming/eclipse/eclipse-ast-parser 的例子之一
  • 是的,我看到人们之前已经设法让它工作,但我找不到任何说它得到官方支持的东西。列出的插件中肯定有很多功能如果不初始化就无法正常工作,但可能这段代码没有使用它。

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


【解决方案1】:

我看不到谁调用了getCompilationUnit 方法,但是为了使用ASTParser,您必须设置单元名称和设置环境(正如我所说,我不确定您是否这样做了),以下代码sn-p 可能会对您有所帮助:

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

【讨论】:

    【解决方案2】:

    我也遇到过类似的问题。

    检查您的 java 版本与您的 jar 版本的兼容性。我正在使用 Java8,所以使用下面的 jar。

    尝试使用最新的 jar eclipse-astparser,它可以工作。 :)

    【讨论】:

    猜你喜欢
    • 2021-10-09
    • 2016-01-19
    • 2018-08-10
    • 2013-07-08
    • 2016-03-25
    • 2011-11-03
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多