공부/JAVA | JSP&Servlet | Spring

[JAVA 에러] nested excption is java.lang.NoSuchMethodError: xxx.xxx.xxx.xxxx.access$0 에러 해결 (ft. 클래스$0, $1 파일들..)

bumcrush 2024. 5. 19. 16:25
반응형

 

[JAVA 에러] nested excption is java.lang.NoSuchMethodError: xxx.xxx.xxx.xxxx.access$0

 

참 학창시절에 날림공부를 많이 하다보니 기본기가 한참은 많이 떨어지는것 같다.

아직도 모르는게 너무 많아!!

 

오늘도 누군가에게 도움 되기를 바라며..

nested excption is java.lang.NoSuchMethodError 에러를 포스팅해본다..

 

 

✅ 나의 상황 설명

로컬에서 개발을 완료 하고 java 파일을 컴파일 하고 class 파일을 개발서버로 옮겼다.

(재시작도 함 ㅇㅇ)

그리고 나서 해당 수정된 기능을 실행헀는데..

저 nested excption is java.lang.NoSuchMethodError 에러가 뜨는거..

 

이런 젠장 노 서치 메소드?? 메소드를 못찾는다고..?

 

구글링, chat gpt 검색 시작..!

 

 

✅ 원인 찾기

구글링, chat gpt 검색해 본 결과, 저 에러에 대한 원인은 몇가지가 있었다.

 

1. 해당 메소드가 없거나 매개변수 갯수가 잘못된 경우 

- 나는 해당 사항 없어서 패스!

 

2. lib 버전 불일치 문제  

- 설마하고 build.gradle 확인.. -> 버전 로컬/개발 일치..

- 로컬 lib 폴더에 있는, jar 파일들도 개발서버와 똑같음..

- 이것도 아니다..

 

3. 클래스 파일 재컴파일 

- 라이브러리 클래스 파일을 수정한 경우,

해당 라이브러리를 사용하는 모든 클래스 파일도 함께 재컴파일 해야한다.

 

 

✅ 문제 해결

3번에서 힌트를 얻었는데,

나같은 경우 수정한 class 파일 폴더에 보니깐..

$1, $2 같이 클래스 파일이 추가적으로 더 생성 되어 있었다. 

 

예를 들면 

Supernova.class  파일이 있는 폴더 경로에

Supernova$1.class

Supernova$2.class

 

이런식으로 클래스 파일이 몇개 더 만들어져있다.

(* 이거 intellJ 폴더 트리에는 안보이니깐.. 꼭 직접 폴더로 가서 확인해 볼것!)

 

컴파일 할때 이 $1, $2 파일도 같이 컴파일이 되는데..

이 $1, $2 클래스 파일들도 같이  개발서버에 옮겨줘야한다!

 

옮기고 나니깐 에러 없이 잘 해결 ! 

 

인텔리J 폴더 트리에 $1,$2 클래스 파일도 같이 보였으면..

더 빨리 찾았을텐데.... ^^

덕분에 하루 날렸다 ㅋㅋㅋ

 

 

 [🎃참고] $1 , $2  클래스 파일은 뭐야?

근데 $1, $2 클래스 파일은 또 뭐야?

챗GPT 알려줘..!

 

 

JAVA 파일안에 익명내부클래스를 사용한 경우,

컴파일 할때 이 클래스만 따로 빼서 '$1', '$2' 같은 형태의 클래스 파일로 컴파일한다.

 

나같은 경우 외부 라이브러리(jar)에 있는 클래스를 가져다 쓰고있었다.. 

(남이 짠 코드이니..어렵도다.. )

익명 내부 클래스(Anonymous Inner Class)는 Java에서 클래스를 정의하는 특별한 방법 중 하나로, 클래스의 이름을 명시하지 않고 즉석에서 클래스를 정의하고 객체를 생성하는 방법입니다. 주로 인터페이스나 추상 클래스를 구현할 때 사용되며, 이벤트 처리나 일회성 기능 구현에 유용합니다.

 

반응형
  • 현재글[JAVA 에러] nested excption is java.lang.NoSuchMethodError: xxx.xxx.xxx.xxxx.access$0 에러 해결 (ft. 클래스$0, $1 파일들..)