2012-04-03 5 views
0

非Eclipse環境(別の基本Java IDEのプラグインとして)でjdtのAST生成機能を使用しようとしています。私は日食の内側にそれを実行したときに私のプログラムが正しくASTを作成しますが、私は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という名前のpublic booleanフィールドがあります。

このエラーの原因は何ですか?

私を助けてください。ここで

は私が含まれてきた日食の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コアモジュールと衝突していたことです。 ideのecjをjdt-core(org.eclipse.jdt.core_XX.XX.jarおよびその他のjarファイル)に置き換え、クラスパスを更新することで問題は解決されました。

+0

完全なスタックトレースはhttp://stackoverflow.com/questions/9961588/java-lang-nosuchfielderror-ignoremethodbodies-exception-while-creating-astのものと似ていますか? –

+0

はい、私はEclipseフォーラムhttp://www.eclipse.org/forums/index.php/m/835729/#msg_835729に投稿して修正を見つけました –

答えて

1

JDTは動的Webプロジェクトで、同じエラーが発生しました。

Manindra Moharanaのおかげで、私はエラーの原因を取り除いた。

まず、「Apache Tomcat 6.0」サーバーライブラリをクラスパスに追加しました。 残念ながら、Tomcatもecjを使用しています。これはjdt.coreのCompilerOptionsクラスと競合します。

解決策は、クラスパスからTomcatサーバーライブラリを削除することです。

これですべてのことはOKです。

関連する問題