dependencies에 특정 모듈을 추가 후, run이 안된다?
728x90
반응형

 

문제 발생

작업하는 스프링부트 프로젝트에는 여러개의 모듈이 있다. 그 중 share 모듈을 auth 모듈에서 사용할 수 있도록 아래와 같이 dependencies에 추가했다.

 

// auth 모듈의 build.gradle.kts
dependencies {
    implementation(project(":share"))
    implementation("io.awspring.cloud:spring-cloud-starter-aws-secrets-manager-config:2.4.4")
}

// share 모듈의 build.gradle.kts
val springCloudAwsVersion = "3.2.1"
dependencies {
    implementation(platform("io.awspring.cloud:spring-cloud-aws-dependencies:${springCloudAwsVersion}"))
}

 

이후에 auth를 run시켜보면 아래와 같이 에러가 발생한다.

08:07:44.497 [main] ERROR org.springframework.boot.SpringApplication -- Application run failed
java.lang.IllegalArgumentException: Unable to instantiate factory class [org.springframework.cloud.bootstrap.BootstrapConfigFileApplicationListener] for factory type [org.springframework.boot.env.EnvironmentPostProcessor]
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/context/config/ConfigFileApplicationListener
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.config.ConfigFileApplicationListener

 

 

원인

이 에러 로그만 보고 원인을 파악하기란 쉽지 않다. 에러 원인은 Spring Cloud 버전과 Spring Boot 버전이 호환되지 않을 때 발생한다.

  • 에러 로그에 나타나는 BootstrapConfigFileApplicationListener는 예전 Spring Cloud 버전에서 사용하는 클래스
  • 위 클래스가 의존하고 있는 ConfigFileApplicationListener는 Spring Boot 2.4까지 존재하다가 Spring Boot 2.4 이후로 제거

내 프로젝트에 적용하면, spring-cloud-starter-aws-secrets-manager 2.x 버전이 Spring Boot 3.x 와 호환되지 않기 때문이다. share 모듈에서 io.awspring.cloud:spring-cloud-aws-dependencies:3.2.1 을 platform으로 선언했지만, 루트 프로젝트인 auth 모듈에서 BOM을 지정하지 않으면 의존성 버전 관리가 불안정해진다. auth 모듈도 Spring Cloud 관련 BOM 없이 Spring Boot 3.3.3만 쓰고 있어 버전 충돌이 발생되었던 것이다.

 

 

해결

auth 모듈의 io.awspring.cloud:spring-cloud-starter-aws-secrets-manager-config를 3.x 버전에 맞게 업그레이드하면 해결된다.

// auth 모듈의 build.gradle.kts
dependencies {
    implementation(project(":share"))
    implementation("io.awspring.cloud:spring-cloud-aws-starter-secrets-manager:3.3.1")
}

 

728x90
반응형