“NoClassDefFoundError : 클래스를 초기화 할 수 없습니다.”오류
프로젝트를 실행할 때 다음과 같은 오류가 출력됩니다.
2009 년 9 월 9 일 오전 8:22:23 org.apache.catalina.core.StandardWrapperValve invoke 심각 : 서블릿 Jersey에 대한 Servlet.service ()에서 예외가 발생했습니다. java.lang.NoClassDefFoundError : SpringFactory 클래스를 초기화 할 수 없습니다. com.point2.prospect.persistence.hibernate.HibernateTransactionInterceptor.doFilter (HibernateTrans actionInterceptor.java:17) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) com.point2.prospect.restapi.ServerErrorInterceptor.doFilter (ServerErrorInterceptor.java:27) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191)에서 org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:128) org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:286) org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:845) org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:583)에서 org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:447) java.lang.Thread.run (Thread.java:619)
이 문제는 웹 전체에서 질문을받는 패턴이 있지만 실제 답변은 없습니다. 이런 종류의 오류의 일반적인 원인은 무엇입니까?
NoClassDefFound 오류는 모호한 오류이며 종종 더 심각한 문제를 숨기고 있습니다. 그것은이다 하지 (클래스가 그냥 일반 거기 경우에 슬로우되는) ClassNotFoundException가 같은.
NoClassDefFound 는 javadocs에서 알 수 있듯이 클래스가 존재하지 않음을 나타낼 수 있지만 일반적으로 클래스 로더가 클래스에 대한 바이트를로드하고 "defineClass"를 호출 한 후 발생합니다. 또한 전체 스택 추적에서 다른 단서 나 가능한 "원인"예외 (특정 역 추적에 아무것도 표시되지 않음)를주의 깊게 확인하십시오.
NoClassDefFoundError가 발생했을 때 가장 먼저 살펴볼 곳은 클래스의 정적 비트 즉, 클래스를 정의하는 동안 발생하는 초기화입니다. 이것이 실패하면 NoClassDefFoundError가 발생합니다. ExceptionInInitializerError를 발생시키고 문제의 세부 정보를 나타내야하지만 제 경험상 드물게 발생합니다. 클래스를 처음 정의하려고 할 때만 ExceptionInInitializerError를 수행하고 그 후에는 NoClassDefFound를 던집니다. 따라서 이전 로그를 살펴보십시오.
따라서 HibernateTransactionInterceptor 라인의 코드를 살펴보고 무엇이 필요한지 확인하는 것이 좋습니다. SpringFactory 클래스를 정의 할 수없는 것 같습니다. 따라서 해당 클래스의 초기화 코드를 확인하면 도움이 될 수 있습니다. 디버그 할 수 있으면 위의 마지막 줄 (17)에서 중지하고에서 디버그하여 예외를 발생시키는 정확한 줄을 찾을 수 있습니다. 또한 로그에서 더 높은 곳을 확인하십시오. 운이 좋으면 ExceptionInInitializerError가있을 수 있습니다.
필요한 클래스 정의가 누락되었습니다. 일반적으로 필수 JAR이 클래스 경로에 없기 때문에 발생합니다.
에서 J2SE API :
공용 클래스 NoClassDefFoundError는 LinkageError를 확장합니다.
Java Virtual Machine 또는 ClassLoader 인스턴스가 클래스 정의를로드하려고 시도하고 (일반 메서드 호출의 일부로 또는 새 표현식을 사용하여 새 인스턴스를 만드는 과정의 일부로) 클래스 정의를 찾을 수없는 경우 발생합니다.
검색된 클래스 정의는 현재 실행중인 클래스가 컴파일 될 때 존재했지만 더 이상 정의를 찾을 수 없습니다.
다른 Linux 사용자 (루트)가 jar 라이브러리를 복사했고 로그인 한 사용자 (프로세스)가 jar 파일 내용을 읽을 수있는 권한이 없었기 때문에 동일한 문제에 직면했습니다.
나는 이것을 가지고 있었다 :
class Util {
static boolean isNeverAsync = System.getenv().get("asyncc_exclude_redundancy").equals("yes");
}
아마도 문제를 볼 수 있습니다. env var는 문자열 대신 null을 반환 할 수 있습니다. 그래서 내 이론을 테스트하기 위해 다음과 같이 변경했습니다.
class Util {
static boolean isNeverAsync = false;
}
문제가 사라졌습니다. Java가 오류의 정확한 스택 추적을 제공 할 수 없다는 것이 너무 안타깝습니다.
이 오류를 보았을 때 OpenJDK를 사용하고 있음을 깨달았습니다. 대신 Oracle JDK를 설치하면 문제가 해결되었습니다.
참고 URL : https://stackoverflow.com/questions/1401111/noclassdeffounderror-could-not-initialize-class-error
'Nice programing' 카테고리의 다른 글
입력 길이를 3으로 나눌 수없는 경우 base64 인코딩에 패딩이 필요한 이유는 무엇입니까? (0) | 2020.10.25 |
---|---|
코드에서 여백 속성 설정 (0) | 2020.10.25 |
내 AJAX 애플리케이션에서 뒤로 버튼에 대한 호출 가로 채기 (0) | 2020.10.25 |
개체 목록에서 고유 한 필드 값을 반환하는 linq 쿼리 (0) | 2020.10.25 |
알려진 글꼴 크기 및 문자에 대한 WPF TextBlock 너비를 계산하는 방법은 무엇입니까? (0) | 2020.10.25 |