java.lang.NoClassDefFoundError 오류

김동건·2024년 12월 5일
0

java.lang.NoClassDefFoundError

💡

java.lang.NoClassDefFoundError는 Java 런타임 환경에서 클래스를 로드하려고 했으나 실패한 경우 발생하는 오류이다. 이 오류는 컴파일 타임에는 문제가 없었지만, 런타임에 해당 클래스를 찾을 수 없을 때 발생한다.

주요 원인

  1. 클래스가 JAR 파일에 포함되지 않음
    • 애플리케이션이 실행 중 필요한 클래스를 포함하는 JAR 파일이나 라이브러리가 클래스패스에 없을 때 발생
    • 예: commons-el 의존성이 추가되지 않았거나 JAR 파일에 포함되지 않은 경우.
  2. 클래스가 의존성 충돌로 인해 로드되지 않음
    • 프로젝트에 동일한 이름의 클래스가 여러 의존성(JAR)에서 정의되어 충돌이 발생
  3. 컴파일 타임과 런타임 클래스 패스 불일치
    • 개발 환경에서는 잘 동작하지만, 빌드 후 배포 시 런타임 환경에서 클래스패스 설정이 누락되거나 잘못된 경우 발생
  4. 클래스가 동적으로 로드될 때 (Reflection)
    • Class.forName() 또는 ClassLoader를 사용해 동적으로 클래스를 로드하려는 경우 해당 클래스가 클래스패스에 없다면 발생
  5. JAR 파일 손상
    • 클래스가 포함된 JAR 파일이 손상되었거나 잘못된 방식으로 패키징된 경우 발생

💡

ClassNotFoundException과의 차이점

  • ClassNotFoundException:
    • Class.forName() 또는 ClassLoader 같은 동적 로딩 메서드에서 클래스가 없을 때 발생.
    • 주로 개발자가 직접 처리 가능한 경우.
  • NoClassDefFoundError:
    • 런타임 시 JVM이 클래스 파일을 로드하려 했으나 실패.
    • 컴파일 시 문제가 없었더라도 런타임 환경에서만 발생.

NoClassDefFoundError 가 발생하면 의존하는 라이브러리의 버전이 서로 맞지 않아 발생하는 경우가 대부분이므로 build.gradle 파일을 확인해보자.

profile
백엔드를 공부하고 있는 초보 개발자입니다.

0개의 댓글

관련 채용 정보