IT/SpringBoot

[에러 해결]jackson-dataformat-yaml 사용 시 java.lang.NoClassDefFoundError 및 java.lang.NoSuchMethodError 에러 해결

twofootdog 2021. 6. 8. 00:54

스프링부트 프로젝트에서 log4j2 설정파일을 보통 xml로 설정하는데, xml 대신 yml로 사용할 경우 빌드툴에 jackson-dataformat-yaml 과 jackson-databind를 추가해줘야 한다. 

 

 

그런데 이 두개의 버전이 불일치할 경우 다음과 같은 에러가 발생한다

Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/std/ToStringSerializerBase

 

 

해당 에러가 발생하는 사유는 jackson-dataformat-yaml과 jackson-databind, 그리고 그 밑에 속한 jackson-core와 jackson-annotations의 버전인 불일치하기 때문에 발생하는 문제다.

내가 추가한 jackson-dataformat-yaml과 jackson-databind과 자동으로 추가된 jackson-core와 jackson-annotations의 버전을 보면 서로 불일치한 것을 확인할 수 있다.

 

만약 jackson-dataformat-yaml과 jackson-databind의 버전을 가장 최신의 버전(이 글을 쓸때의 가장 최신의 버전은 2.12.3 버전이다)으로 셋팅해줘도 jackson-core와 jackson-annotations의 버전(2.11.4)과 불일치 하기 때문에 에러가 발생한다

 

에러 내용 :

Exception in thread "main" java.lang.NoSuchMethodError: 'com.fasterxml.jackson.core.util.JacksonFeatureSet com.fasterxml.jackson.core.JsonParser.getReadCapabilities()'

 

 

때문에 jackson-dataformat-yaml과 jackson-databind의 버전을 jackson-core와 jackson-annotations의 버전과 동일한 2.11.4 버전으로 셋팅해줘야 한다.