NoClassDefFoundError
: 일반적으로 해당 에러는 컴파일 시점에 존재했던 클래스가 런타임시 존재하지 않으면 발생하는 에러이다.
즉, 정상적으로 컴파일 후 런타임에서 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' 카테고리의 다른 글
[Error] java.lang.NoClassDefFoundError (0) | 2023.11.22 |
---|