얼마 전 업무를 하다 java.lang.NoClassDefFoundError 를 만났는데 상당수 ClassNotFoundException와 헷갈리는 부분이 있을 것 같다. 과거에도 이 에러를 많이 만났지만 그때마다 어찌저찌 해결만 했을 뿐 명확히 포스팅으로 정리해본적이 없어서 정리를 해본다.
1. 원인
java.lang.NoClassDefFoundError가 발생하는 이유는 컴파일 환경에서는 클래스 참조가 되었지만 실행 환경에서는 해당 클래스를 찾을수 없는 경우 발생한다.
그래서 코딩을 할때는 아무 문제가 없다가 spring boot나 was로 실행 시킬 때 만나거나, PC에서 개발 할때는 아무 문제가 없다가 서버에 올렸을 때 만나게 된다.
재연을 해보고 싶다면 클래스 두개를 만들어 하나에 종속되게 만들어놓고 참조 당하는쪽의 클래스를 삭제하고 실행하면 해당 문제가 생길것이다.
package test;
public class Test1 {
public static void main(String[] args) {
Test2 t2 = new Test2(); // 컴파일 후 Test2를 삭제하고 실행하면 발생!
}
}
class Test2{
}
2. 해결방법
어떻게 해결하면 되냐고. 당연히 컴파일 시에 참조했던 클래스패스와 라이브러리들(jar...들)을 실행환경에서나 서버에서도 동일하게 맞춰주면 된다. java.lang.NoClassDefFoundError가 발생하는 클래스에 종속된 라이브러리들을 다 봐야 해서 좀 어려울수(오래 걸릴수) 있다.
쉽게 생각해서 PC에서 참조된 jar가 서버에는 없다거나 클래스 패스 설정에서 빠져있다거나 , jar는 있지만 jar 버전이 다른 경우도 있다. 버전이 낮거나, 높아서 <= 의외로 이런 경우 있다. 이상이 없다면 버전도 확인해보자.
'dev > java' 카테고리의 다른 글
ArithmeticException 에러 해결 방법 (0) | 2019.08.24 |
---|---|
FileNotFoundException 에러 해결 방법 (3) | 2019.08.22 |
indexOutofBoundException 에러 해결 방법 (0) | 2019.08.20 |
ClassNotFoundException 에러 해결 방법(java.lang.ClassNotFoundException) (0) | 2019.08.18 |
자바 8 인 액션(java 8 in action)을 읽고... (0) | 2019.08.05 |
자바 최대공약수와 최소공배수 구하기 (0) | 2019.06.15 |
릿코드(LeetCode) - Add Two Numbers (0) | 2019.04.13 |
자바 NullPointerException 에러 원인과 예방(일명 널포인터) (0) | 2018.09.05 |