NoClassDefFoundError — 클래스 정의를 찾을 수 없을 때

NoClassDefFoundError — 클래스 정의를 찾을 수 없을 때

NoClassDefFoundError는 JVM이나 ClassLoader 인스턴스가 (일반 메서드 호출의 일부로, 또는 new 표현식으로 새 인스턴스를 만드는 일부로) 클래스의 정의(definition)를 로드하려 했는데 그 정의를 찾을 수 없을 때 던져지는 에러예요.

출처: Java API Reference

본문

흥미로운 점은, 찾는 클래스 정의는 현재 실행 중인 클래스를 컴파일할 당시에는 존재했다는 거예요. 그런데 런타임에는 그 정의를 더 이상 찾을 수 없는 상태인 거죠. 예를 들어 의존 라이브러리 JAR이 classpath에서 빠졌거나, 클래스 파일이 삭제됐거나, 클래스 로딩이 부분적으로 실패한 경우에 흔히 나와요. 그래서 "컴파일은 됐는데 런타임에서 클래스를 못 찾겠다"는 신호로 해석하는 게 정확해요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.Throwable
    java.lang.Error
      java.lang.LinkageError
        java.lang.NoClassDefFoundError

생성자

  • NoClassDefFoundError() — 상세 메시지 없이 생성해요.
  • NoClassDefFoundError(String s) — 지정된 상세 메시지로 생성해요.

더 알아보기 (Learn more)