NoClassDefFoundError는 자바 실행 시에 ClassNotFoundException과 함께 만나게 되는 에러이다.
이 두 가지 에러는 조금 혼란스럽다.
> ClassNotFoundException 발생사례
클래스 경로에 클래스가 없을 경우, Class.forName("SomeClass")으로 찾을 경우
> NoClassDefFoundError 발생 사례
new SomeClass()로 사용한 경우에는 NoClassDefFoundError가 나게 된다. 이 경우는 컴파일 시에는 존재했던 클래스 바이트 정의를 런타임 시에 찾지 못한 경우
NoClassDefFoundError가 LinkageError의 자식 클래스인 것도 이를 뒷받침해준다.
> NoClassDefFoundError 발생 사례 추가
실제 Java VM에서 어떤 경우에 NoClassDefFoundError를 발생시키는지 유형을 정리해두면 문제가 발생했을 때 해결 혹은 판단에 도움이 될 것이다.
> VirtualMachine.redefineClasses : if the bytes don't correspond to the reference type (the class names don't match).
> ClassLoader.defineClass : 바이트 코드가 정의한 클래스 이름과 정의하려는 이름이 다를 경우
> RMIClassLoader static initializer : RMIClassLoader 제공자 클래스를 찾지 못했을 때
> rmi MarshalInputStream static initializer : rmi server를 위한 시스템 클래스를 찾지 못했을 때
orgURL : Log on Java