Forest Gump?

코딩 삽질 일기 -1 (class not found) 본문

카테고리 없음

코딩 삽질 일기 -1 (class not found)

code1010 2023. 1. 5. 20:01

오늘은 RestTemplate 을 사용하려고 의존성을 주입해주고, 불러와서 쓰려고 하는데 갑자기 오류가 났다. 

 

NoClassDefFoundError: org/apache/http/impl/client/HttpClients] with root cause

java.lang.ClassNotFoundException: org.apache.http.impl.client.HttpClients at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] at org.springframework.http.client.HttpComponentsClientHttpRequestFactory.<init>(HttpComponentsClientHttpRequestFactory.java:79) ~[spring-web-5.3.23.jar:5.3.23]

비교적 간단한 문제라고 생각해서 build.gradle에

 

implementation 'org.apache.httpcomponents:httpclient:4.5.13'

 

을 추가해줬다. 만약에 이런 문제로 여기를 방문하시게 되는 분들이라면 9할은 이 부분으로 해결이 될거다.

하지만 clean 과 build를 하는데 계속 오류가 발생한다. 

이떄까지만 해도 쉬운 오류중 하나겠거니 하고 , 설마 의존성 주입이 잘못됐나? 생각하고 

 

의존성 주입을 방법도 재정의 해서 생성자 주입  DI하는 방법 말고 @bean 방식으로도 변경해보고 필드 주입으로도 해봤다. 문제없이 잘 돌아갔다. 

여기서  넘어가고 싶지만 쓸데 없는 오기가 발현되어 이유를 찾아야겠다! 하고 뒤져봤다. 

HttpComponentsClientHttpRequestFactory 메소드를 봤더니 참조를 못해서 발생하는 오류였다.

근데 http.client 객체를 찾아서 gradle에 dependency 추가까지 했는데 저 이유가 나오는게 너무 궁금해서 

(문서 봤더니 4.3이상 버전부터 지원한다고 해서 httpClient 4.3 이상 버전별로 다 깔아봤다.) 

maven + 자바 8으로도 실험해봤다.( 기존 gradle + 자바17)

문제없이 잘 작동한다..? 그래서 스프링 프레임워크 라이브러리 코드를 read Only에서 수정하고싶어서 찾아보니까 , 방법을 결국 못찾았다. 몇번이나 apache HttpClient을 버전별로 clean 하고 build했는지 모르겠다. 

그리고 많은 레퍼런스를 몇시간 동안 찾아봐도 답이 안나왔다 .

 

결구 WebClient을 써야하나.. OkHttp를 사용해야 하나 아니면 아파치가 아닌 기본 java HttpClient를 사용해서 할까.. 하다가 버벅거려서 인텔리제이를 껐다 켰는데.. 그리고 혹시나 하고 리로드를 해봤는데..

된다.. import HttpClient를 정상적으로 한다 ㅠㅠ 

 

결론 : 도저히 모르겠을떄는 intellij 를 껐다켜봐라.. 전공자들이 컴퓨터 문제가 생길때 본체를 괜히 친게 아니라는 꺠달음을 얻었다.