스프링 사용 중 java.lang.NoSuchMethodError

aaron.park·2020년 4월 8일
1
post-custom-banner

업무 중 데이터베이스 단위 테스트를 위해 springtestdbunit을 사용하려고 필요한 의존성(dbunit, springtestdbunit)을 찾아 pom.xml에 추가하였다.

<!-- pom.xml -->

<!-- ...생략... -->
<dependency>
  <groupId>com.github.springtestdbunit</groupId>
  <artifactId>spring-test-dbunit</artifactId>
  <version>1.3.0</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.dbunit</groupId>
  <artifactId>dbunit</artifactId>
  <version>2.5.2</version>
  <scope>test</scope>
</dependency>
<!-- ...생략... -->

그리고 junit을 실행하였더니 아래와 같은 예외가 나왔다.

java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.findAnnotation
...생략...

찾아봤더니, 스프링 버전 차이에서 발생한 이슈였다. 스프링을 사용하는 의존성의 버전을 서로 맞춰주지 않으면 위와 같은 예외가 발생한다. 생각해보면 당연한게, 버전이 진행될 때마다 메서드 등 코드가 추가될 것이기 때문에...
메이븐 저장소에서 사용하고자 하는 라이브러리(springtestdbunit-1.3.0)의 의존성의 버전을 살펴보았다.

스프링 버전은 4.2.5 버전을 바라보고 있으며, 회사의 스프링 버전은 3.2.4였다. 스프링 4에서만 있는 메서드를 스프링 3에서 찾으려니 당연히 에러가 날 수밖에.. (정확히는 AnnotationUtils의 findAnnotation이라는 메서드의 매개변수가 바뀌어서 발생했다. 관련 링크)
springtestdbunit의 버전을 1.0.1로 낮추고, 메이븐 저장소에서 의존성을 다시 살펴보았다.

이 녀석은 스프링 3을 바라보고 있다. pom.xml에 dbunit과 함께 버전을 수정해 준다.

<!-- pom.xml -->

<!-- ...생략... -->
<dependency>
  <groupId>com.github.springtestdbunit</groupId>
  <artifactId>spring-test-dbunit</artifactId>
  <version>1.0.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.dbunit</groupId>
  <artifactId>dbunit</artifactId>
  <version>2.4.8</version>
  <scope>test</scope>
</dependency>
<!-- ...생략... -->

수정 후 reimport 결과 잘~~된다.

오늘의 교훈) 복붙을 하더라도 알고 하자.. 의존성끼리는 버전을 맞추자..!

profile
애런 퐉의 블로그
post-custom-banner

0개의 댓글