java.lang.NoClassDefFoundError 에러 해결 방법

1375 단어 JavaJava

결론

컴파일 된 class들의 폴더인 out을 제거하고 다시 빌드한다.

상황

열심히 리팩토링을 하다보면 클래스 위치를 옮기기도, 삭제하기도, 이름을 바꾸기도 한다. 이 때마다 IDE의 자동 리팩토링 기능이 열심히 우리 대신 일해준다. 그러나 IDE도 사람이 만든 놈, 완벽하지는 않다. 그래서 가끔 테스트 코드가 깨지고 맞왜안, 이왜안 등등의 상황이 생기는데, 이번에는 이런 상황이 생겼다.

java.lang.NoClassDefFoundError

테스트 코드에서 해당 에러가 발생하는 상황은 다음과 같았다.

  1. 분명 존재하는 클래스인데 못 읽어온다.
  2. 이미 삭제한 테스트인데 테스트에서만 계속 뜬다.

이유가 무엇이든 빨간 불로 개발자의 화를 돋군다. 게다가 이 경우엔 진짜 내 잘못은 없어서 억울하다.

해결 방법

IDE의 리팩토링 기능도 이미 컴파일 된 class를 수정해주지는 않는다. 따라서 이전 컴파일된 파일들과 현재 수행하는 테스트 사이에서 충돌이 생겨서 해당 오류가 발생한다.
그러므로 이전 컴파일된 class 파일이 담긴 폴더를 삭제하고 새로이 컴파일 해주면 해결된다. 즉, out폴더를 삭제하면 된다.

java.lang.NoClassDefFoundError 내부 주석

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

좋은 웹페이지 즐겨찾기