일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- afterCompletion
- Connection Draining
- ChatGPT
- 네트워크 io
- reflection API
- jpa
- 람다 캡쳐링
- SSR #CSR
- superset-oracle
- 자바로그
- ReactAdmin
- aws
- queryDsl #JPA #hibernate
- Duration-Based Cookie
- 슬로우 쿼리
- 자연변수
- oracle
- 아파치 드루이드
- UNION 열
- CannotGetJdbcConnectionException
- Cross-Zone Load Balancing
- Application-Based Cookie
- RequestBody로깅
- ContentCachingRequestWrapper
- 코딩삽질일기
- Routing Policies
- 스프링
- hikari cp
- Route53
- querydsl-sql
- Today
- Total
Forest Gump?
코딩 삽질 일기 -1 (class not found) 본문
오늘은 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 를 껐다켜봐라.. 전공자들이 컴퓨터 문제가 생길때 본체를 괜히 친게 아니라는 꺠달음을 얻었다.