[오류]NoSuchMethodError 해결

Inung_92·2023년 1월 26일
1

오류

목록 보기
3/6

상황설명

🚨java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest)

어김없이 오늘도 에러가 발생했다. 요즘은 실습을 하면서 에러가 나지 않으면 오히려 불안하다. 어디 어떤 에러가 발생한건지 한번 알아보자.

개발환경

  • OS : MacOs
  • 툴 : eclipse
  • project : maven project
  • java version : openjdk 11version
  • server version : tomcat 9.0

쇼핑몰을 admin 페이지를 작성하던 중 상품 목록을 불러오는 기능을 구현하고 이번에도 git에 커밋을 하고 난 뒤 재부팅을 했다. 근데 왜 git을 사용하거나 재부팅을 하고나면 에러가 발생하는지 아직도 이유를 잘 모르겠다. 아무리 찾아봐도 해답은 나오지 않는다. 개발환경 세팅이 잘못된 것일지도 모르니 한번 초기화를 해야할 듯하다.

오류는 페이징처리를 위하여 JSP의 HttpServletRequest 인터페이스를 구현하는 내장객체인 request 객체가 에러를 발생시켰다. NoSuchMethodError는 메서드를 찾지 못하거나 메서드에 전달되는 파라미터가 올바르지 않을 경우 발생한다. 최초 기능구현을 할 때에는 잘 작동하던 메서드가 갑자기 안되는 것이 이상할 따름이었다.


원인

명확한 원인을 찾을 수는 없었다. 상황상 git에 커밋을 완료하고 난 뒤에 발생한 일이기 때문이다. 최근 겪는 에러들은 git에 커밋을 하고나면 클래스패스 및 maven 라이브러리의 jar파일들에 문제가 생겨서 발생하는 에러들인 듯하다.

예상했던 원인

  • maven 라이브러리의 jar파일 미보유
  • jre 라이브러리의 버전 미일치
  • deployment assemply에 maven 경로 미지정

위의 3가지의 원인을 예상해봤지만 어디하나 빠지거나 잘못된 부분은 없었다. 답답한 마음에 구글링을 하다보니 javax.servlet.jar를 maven에 의존성 주입을 직접하는 것이 안전하다는 것을 보고 시도해보았다.


해결

⚡️JRE 버전 일치

먼저 혹시 모르는 마음에 프로젝트 내 JRE 버전을 현재 사용하는 워크스페이스와 동일하게 설정하는 것을 먼저 진행하였다.

프로젝트를 마우스 우클릭한 뒤 properties를 눌러 속성 설정 창을 띄운다.

Java Build Path 탭에서 Libraries 배너를 클릭 후 JRE System Library를 선택하여 Edit을 눌러준다.

기존에 설정된 JRE는 Execution으로 되어있을 텐데 해당 부분을 아래와 같이 Workspace default JRE로 수정해준다.

최종적으로 Finish를 누르고 저장하면 된다. 이렇게해도 계속 에러가 날 수도 있다. 그렇다면 다음 과정을 따라하자. 간단하다.

⚡️Maven 의존성 주입

먼저 project 내 pom.xml 파일에 javax.servlet.jar 의존성 주입을 해준다. 버전은 본인이 사용하는 환경에 맞게 지정해주길 바란다.

pom.xml 파일의 변경을 저장하고, 서버를 재가동 해주고 난 뒤 실행시키면 잘 작동할 것이다.


마무리

실습을 진행하면서 에러가 나는 경우들이 허다하다. 대부분은 실시간으로 해결되기는 하지만 개발환경 내에서 오류가 나는 경우에는 이것저것 시도를 하다보니 시간을 많이 뺏기는 경우가 많다.

오늘과 같은 상황은 원인을 계속 명확하게 찾을 수 없어서 발생하는 에러이다. 그래서 git을 커밋하고 커밋한 로그를 들여다보니 관련없는 프로젝트들의 classpath 및 ignore 파일 등이 계속 변경되는 것이 보였다. 혹시 관련이 있을지 모르니 해당 부분을 찾아보고 원초적인 원인을 제거해야겠다.

profile
서핑하는 개발자🏄🏽

0개의 댓글