[오류]NoClassDefFoundError 해결해보기

Inung_92·2023년 1월 17일
2

오류

목록 보기
1/6

에러발생 상황

학원에서 실습과제로 jQuery / ajax / jsp 등을 이용하여 부서별 직원 목록을 조회하여 출력하는 실습을 진행하였다. 수업시간 내에 완성하여 동작이 잘 되는 것까지 확인하고, github에 해당 실습과제를 commit하고 다시 실행해보니 에러가 갑자기 발생하는 것이다.

java.lang.NoClassDefFoundError: org/apache/ibatis/io/Resources

에러 코드는 다음과 같다.

실습 간 사용한 JDBC는 mysql로 mybatis를 이용하여 외부에서 커넥션 자원을 끌고오는 방식으로 클래스를 생성하여 사용한 것이다.

클래스 구조는 다음과 같다. 그림의 음영처리 되어있는 부분에서 오류가 발생한 것이다.
즉, Resources 클래스를 찾을 수 없다는 에러인 것이다. 혹시나해서 maven 라이브러리를 확인하고, 해당 경로가 이상이 있을까봐 다 뒤져봤지만 3시간 동안 원인을 찾을 수 없이 구글링만 했던 것 같다.


추측되는 원인

원인을 명확하게 찾을 수는 없었지만 추측가는 원인이 한가지 있다. 에러가 발생한 시점을 생각해보면 github에 커밋을하고 나서 에러가 발생했다. 혹시 몰라 github을 확인해보니 내가 커밋하지 않은 디렉토리의 클래스패스 설정 파일들이 수정되어있는 것을 확인했다. 어디선가 충돌이 있었던 것 같다.

이러한 형태로 내가 수정하지 않은 부분들이 수정이 된 것이다. 그래서 디렉토리 혹은 클래스패스의 문제로 인지하여 해결을 하려했으나 어림없는 소리. 계속 미친듯이 오류가 뜬다.

일단 집에서 간식을 먹고 해결하기 위해 이동하면서 해결 방법들을 알아보았다.


해결과정

먼저 자원의 경로가 잘못되어있을 수 있어 디렉토리 경로를 바꿔보았다.

기존 구조를 보면 emp.mybatis라는 패키지안에 클래스 파일과 xml 파일이 같이 들어있어 해당 영역을 분리해주었다.

이렇게 resource라는 폴더 안으로 xml파일을 옮겨주기 시작한 것이다. 아는 동생의 개발환경에서 실행해보았는데 정상작동하는 것이다. 그렇다면 잘 될 줄 알았다. 아주 얄팍한 생각이었다는 것을 알아채는데 정확히 10초걸렸다.

계속 오류 코드는 뜨고, 해결방법을 못찾고 실습과제를 날려야하나 생각하다가 마지막으로 프로젝트의 properties안에서 해결을 해보기로 하였다.

여기서 몇가지 이상한 점을 발견했다.

  • 분명히 mybatis의 .jar파일은 라이브러리에 들어있다.
  • xml 파일내에 설정된 부분이나 쿼리문의 오류는 없다.
  • 혹시 몰라 아는 동생에게 해당 실습과제를 넘겨주었는데 실행에 이상이 없었다.
    이 말은 정상적인 프로젝트 구조라는 것이다. 내 컴퓨터에서만 안된다.

위의 세가지에 대하여 확인하다보니 Diployment Assembly라는 설정이 있다는 것을 알게되었다. 정의만 간단히 보자

deployment assembly : 프로젝트의 임시배포 공간을 마련하는 것
java build path : 프로그램에 라이브러리(jar)를 추가하는 것

프로젝트를 우측 클릭하여 properties 메뉴로 들어간다.

좌측 목록을 보다보면 저렇게 deployment assembly를 눌러보면 프로젝트 내부의 폴더를 조립하는 기능을 하는 듯하다. 멀티 프로젝트인만큼 각 폴더를 조립하는데 지원을 해주는 것이다.

여기에 그림처럼 maven dependencise가 존재하여야하는데 나는 없었다. 그렇다. 그래서 jar를 인식하지 못하니 클래스를 찾을 수가 없는 것이다.

나처럼 해당 폴더가 없으면 add를 눌러 java bulid path entries를 누르게되면 jar파일을 관리하는 라이브러리들이 보인다. 거기서 maven을 추가해주면 된다. 아주 간단하다.

설정을 하고나면 위 그림처럼 갑자기 세팅환경이 자동으로 늘어나기 시작한다. 이렇게 나의 길다면 긴 오류잡기 여정은 끝이 났다.


요약

정리를 하자면 다음과 같다.

  • 라이브러리를 사용해야하는데 jar를 인식하지 못하기 때문에 NoClassDefFoundError가 발생
  • jar를 찾아주기 위해서는 jar가 담긴 라이브러리 폴더가 제대로 설정되어있는지 확인 필요
  • 프로젝트의 properties 메뉴에서 deployment assembly 탭에서 maven dependencies(다른것이 될 수도있음)가 설정되어 있는지 확인 필요
  • 없다면 add를 눌러 해당 폴더 추가하여 저장 후 닫기
  • 이클립스에서 자동으로 세팅환경을 조정함

다들 개발을 하다보면 어려움이 참 많을 것이다. 오류코드라도 제대로 나오면 해결을 하겠지만 툴을 사용하다 오류가 나면 이렇게 스트레스 받고 힘들다. 한번 개발환경 세팅 할 때 귀찮아도 진심으로 최선을 다하자.

profile
서핑하는 개발자🏄🏽

0개의 댓글