일반적으로 해당 에러는 컴파일 시점에 존재했던 클래스가 런타임시 존재하지 않으면 발생하는 에러이다.
즉, 정상적으로 컴파일 후 런타임에서 Classpath에서 Class C가 없어진다면
JVM이 Class C를 로드할 수 없기 때문에 해당 에러가 발생한다.
하지만 해당 에러는 단순히 classpath의 문제로 발생하지는 않는다. 비슷한 에러와 함께 살펴보자
1. java.lang.ClassNotFoundException
이 Exception은 Classpath에 로드하고자 하는 Class가 발견되지 않았을 때 발생한다.
보통 빌드에 문제가 있는 경우로, clean이나 Class 파일 삭제 후 재빌드를 수행하여 해결한다
2. java.lang.NoClassDefFoundError
이 Exception은 JVM이 내부의 클래스 정의 데이터 구조(class definition data structure)에서 Class를 찾지 못했다는 것을 나타낸다.
단순히 classpath에서 Class를 로드하지 못했다는 것과 약간은 다르다.
해당 에러는 과거에 classpath에서 class를 로드하려 했지만 실패하고, 다시 해당 class를 사용하려고 시도할 때 로드에 실패했던 전적이 있으니 로드를 시도하지도 않고 NoClassDefFoundError를 뱉어버린다.
즉, 최초의 로드 실패는 ClassNotFoundException, ExceptionInitializerError 등 여러 다른 이유로부터 발생할 수 있다.
- 의존하는 라이브러리의 버전이 서로 맞지 않는 경우 해당 에러가 발생하는 경우가 많다고 한다. 참고하기!
참고사이트
'java > error' 카테고리의 다른 글
[java] java.lang.NoClassDefFoundError (0) | 2023.10.30 |
---|