05AM

Error : java.lang.NoClassDefFoundError - Dependency 충돌 / build cache 충돌 본문

Error Traceback

Error : java.lang.NoClassDefFoundError - Dependency 충돌 / build cache 충돌

_05AM 2023. 7. 21. 23:43

에러

java.lang.NoClassDefFoundError

[출처] NoClassDefFoundError 발생원인 및 해결(ClassNotFoundException와 차이점) :: 양's World (tistory.com)

NoClassDefFoundError는 컴파일 시점에 존재했던 클래스가 런타임에 존재하지 않으면 발생하는 에러이다.

이번 경우 NoClassDefFoundError는 하나의 라이브러리에서 발생하지 않았다. org.apache나 org.springframework.spring-core 등 spring boot web starter에서 기본적으로 포함되어 있는 라이브러리에서 충돌이 일어났다.

기본적인 라이브러리의 클래스가 로드되지 않는 것은 dependency 간의 충돌이 있거나 build할 때 생성되는 cache에 충돌이 있다고 생각되었다.

 

과정

  1. dependency tree 확인하기찾기 기능을 이용해 에러가 일어난 라이브러리의 버전들을 체크해봤지만 충돌이 일어날만한 것은 발견하지 못했다. 만약 버전 충돌이 일어나는 라이브러리를 찾는다면 플러그인 등 버전 조율 도구를 사용해 적절한 버전으로 맞춘다.
  2. intelliJ에서 gradle - help - dependencies 를 누르면 dependency tree를 볼 수 있는데 특정 라이브러리들이 각각 버전이 다른 한 종류의 라이브러리를 포함하고 있는 경우 충돌이 일어나 클래스가 제대로 로드되지 않을 수 있다.
  3. clean 후 build이 방법을 사용하여 에러를 해결했다.
  4. 두 번째 방법인 build 시 cache 충돌을 해결하기 위해서 build 대신 clean build를 사용해서 build 하도록 설정했다.
Comments