2012-04-03 1 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라는 공개 부울 필드가 있습니다.

이 오류의 원인은 무엇입니까?

도와주세요. 여기

내가 포함 한 일식 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

예, 이클립스 포럼 http://www.eclipse.org/forums/index.php/m/835729/#msg_835729에 게시 한 후 수정 사항을 발견했습니다. –

답변

1

JDT는 동적 웹 프로젝트이며 동일한 오류가 발생했습니다.

Manindra Moharana의 대답 덕분에 오류의 원인을 찾아 냈습니다.

처음에는 "Apache Tomcat 6.0"서버 라이브러리를 클래스 경로에 추가했습니다. 불행히도 Tomcat은 ecj를 사용하는데, 이는 jdt.core의 CompilerOptions 클래스와 충돌합니다.

그래서 해결책은 클래스 경로에서 Tomcat 서버 라이브러리를 제거하는 것입니다.

이제 모든 것이 정상인 것처럼 보입니다.