2012-10-30 3 views
2

Hibernate를 사용하여 Google Web Toolkit 프로젝트에서 원격 프로 시저 호출을 구현하고 있습니다.NoClassDefFoundError : org/hibernate/cfg/Configuration

Starting Jetty on port 8888 
    [WARN] Exception while dispatching incoming RPC call 
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String edu.mit.ll.irbenchmark.client.MetricDataTableService.getDataString(edu.mit.ll.irbenchmark.EvaluationMetric)' threw an unexpected exception: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration 
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385) 
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 

그러나 때 "GWT 컴파일"나는 구글 "웹 응용 프로그램"으로 이클립스에서 실행할 때, 나는 NoClassDefFoundError를의 (I 웹 페이지에서 버튼을 누를 때) 서비스라고 예외가 프로젝트 및 디렉토리 "전쟁"의 내용을 tomcat6에 복사, 그것은 완벽하게 작동합니다!

다음 단지 내 전쟁/WEB-INF/lib 디렉토리에 있습니다

antlr-3.4-complete.jar 
commons-collections3-3.2.1.jar 
dom4j.jar 
gwt-servlet.jar 
hibernate-commons-annotations-3.2.0.Final.jar 
hibernate-core-3.6.9.Final.jar 
hibernate-jpa-2.0-api-1.0.1.Final.jar 
IRBenchmarker.jar 
javassist-3.12.0.GA.jar 
jta-1.1.jar 
log4j-1.2-1.2.16.jar 
mysql-connector-java-5.1.16.jar 
slf4j-api-1.6.4.jar 
slf4j-log4j12-1.6.4.jar 
+0

이 질문이 Google 테스트를 통과 했습니까? http://stackoverflow.com/questions/9851528/java-lang-noclassdeffounderror-org-hibernate-cfg-configuration –

+0

예. 앞서 명시 적으로 설명한 것처럼, 최대 절전 모드 병은 war/WEB-INF/lib 라이브러리에 있습니다. – Clark

답변

1

은 WEB-INF/lib 디렉토리에 라이브러리를 두는 이클립스 충분하지 않습니다. 프로젝트의 클래스 경로에도 추가해야합니다 (항아리를 마우스 오른쪽 단추로 클릭하고 빌드 경로> 빌드 경로에 추가를 선택하십시오).

+0

새로운 답변 대신에 대체로 NCDFE가 CNFE가 어디에도없는 클래스 정의가 아닌 두 개의 다른 장소에서 사용할 수있는 동일한 클래스의 인스턴스입니다. 그래서 여러 개의 최대 절전 모드 병을 사용할 수 있습니다. –

+0

@jesse : 응용 프로그램이 문자열 이름을 통해 클래스를로드하려고하면 [CNFE] (http://docs.oracle.com/javase/6/docs/api/java/lang/ClassNotFoundException.html)가 throw됩니다. ". [NCDFE] (http://docs.oracle.com/javase/6/docs/api/java/lang/NoClassDefFoundError.html)는 "정상적인 메소드 호출의 일부로 또는 생성의 일부로 클래스를로드하면 발생합니다 'new' 표현식을 사용하는 새로운 인스턴스입니다. –

+0

최대 절전 모드 라이브러리는 프로젝트의 클래스 경로에 있습니다. 패키지 탐색기의 Referenced Libraries 아래에 org.hibernate.cfg.Configuration 클래스가 있습니다. 클래스 패스에 클래스의 정의가 여러 개 있는지 여부를 쉽게 알 수 있습니까? – Clark

1

프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하십시오. Google -> 웹 응용 프로그램으로 이동하십시오. "이 프로젝트에는 WAR 디렉토리가 있습니다"가 선택되어 있고 확인란 아래에 war 폴더가 지정되어 있는지 확인하십시오. 이제 그곳에 계셔서 Google-> Web Tooklit을 살펴보고 "Google Web Toolkit 사용"이 선택되어 있고 올바른 라이브러리에 문제가 있는지 확인하십시오.

+0

모두 괜찮아요. 조언 해주셔서 감사합니다 – Clark