java.lang.NoClassDefFoundError vs java.lang.ClassNotFoundException

minchoi·2022년 2월 21일
0

참고
https://yangbox.tistory.com/117
https://stackoverflow.com/questions/34413/why-am-i-getting-a-noclassdeffounderror-in-java

HttpServletRequest 클래스를 사용하려고 했는데 그 순간 이런 오류가 발생했다.
java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest

ClassNotFoundException 이 친구는 여러번 만나봤어도 NoClassDefFoundError는 처음 만났다. ^^; 다이나믹쓰. 심지어 아직 해결하지 못함. 일단 언제 발생하는 녀석인지 잘 이해해보자.

ClassNotFoundException

Classpath에 로드하고자 하는 Class가 발견되지 않았을 때 발생
빌드에 문제가 있는 경우가 많아 clean이나 class 파일 삭제 후 재빌드로 수행 해결

Classpath: 클래스를 찾기 위한 경로 (보통 프로젝트파일명\target\classes)

NoClassDefFoundError

컴파일 시점에 존재했던 클래스가 런타임에 존재하지 않으면 발생하는 에러
JVM이 내부의 클래스 정의 데이터 구조에서 Class를 찾지 못하였음을 나타냄. Classpath에서 class를 로드하지 못한 것과는 다르다.

public class NoClassDefFoundErrorDemo {
    public static void main(String[] args) {
        try {
            // The following line would throw ExceptionInInitializerError
            SimpleCalculator calculator1 = new SimpleCalculator();
        } catch (Throwable t) {
            System.out.println(t);
        }
        // The following line would cause NoClassDefFoundError
        SimpleCalculator calculator2 = new SimpleCalculator();
    }
}

public class SimpleCalculator {
    static int undefined = 1 / 0;
}

한 번 ClassNotFoundException와 같은 예외가 발생하고 나면 NoClassDefFoundError 다음에는 얘가 발생하는 느낌인건가?

해결하면 더 자세히 적어보겠다.

profile
발등에 불이 따뜻하다..

0개의 댓글