상황
submodule로 application.yml 파일을 관리하려고 구현하였지만, build에 실패하였다.
test 수행시 IllegalStateException으로 인해 contextLoads에 실패하였고
UrlumberjackApplicationTests > contextLoads() FAILED
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:142
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:800
Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:533
Caused by: java.lang.IllegalArgumentException at PropertyPlaceholderHelper.java:180
DataSourceProperties를 찾지 못해 IllegalStateException이 발생된 것으로 확인하였다.
java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:142
Caused by: org.springframework.beans.factory.BeanCreationException at ConstructorResolver.java:659
Caused by: org.springframework.beans.BeanInstantiationException at SimpleInstantiationStrategy.java:171
Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException at DataSourceProperties.java:186
DataSource는 application.yml에 DB접속 정보를 입력하는 속성이므로, application.yml관련 문제임을 의심했다.
확인해보니, build시에 application.yml을 test 실패 후에 submodule디렉토리에서 resources디렉토리로 복사하는것을 확인하였다.
원인
---
build.gradle에서 의존성이 존재하는 task를 제대로 의존성관리를 하지 못해서 발생하였다.
build.gradle에 작성한 아래의 두 task가 있다.
1. test 수행 task
test {
useJUnitPlatform()
outputs.dir snippetsDir
}
2. application.yml을 submoudle 디렉토리에서 resources로 복사하는 task
tasks.register('copyPrivate', Copy) {
from './URLumberjack-private'
include "*.yml"
into './src/main/resources'
}
2번을 수행 후 1번을 수행해야 하지만, 아무런 의존성도 명시하지 않아
1번이 먼저 수행되었고, 당연히 application.yml이 존재하지 않으므로 test수행이 불가해 오류가 발생하였다.
해결
depends on 구문을 사용하여 의존성을 명시하였다.
test {
useJUnitPlatform()
outputs.dir snippetsDir
dependsOn copyPrivate
}
추가로, test의 task에만 명시하면 다른 작업에 종속된 작업이 있지만 해당 두 작업 간에 명시적 또는 암시적 종속성이 선언되지 않았다는 이유로 아래의 오류가 출력된다. [참고사이트 이동]
그래서 build.gradle에 아래와 같은 블럭을 추가해야 한다.
processResources {
dependsOn copyPrivate
}
이를 통해 copyPrivate task의 출력물인 application.yml을 다른 task가 사용함을 명시적으로 표현하여 gradle이 의존성을 올바르게 인식하고 사용하게 됩니다.
'Debug Log > 삽질기' 카테고리의 다른 글
[짧]WSL 에러( Error: 0x80040326 Error code: Wsl/Service/0x80040326) (1) | 2023.03.31 |
---|---|
AWS) EC2 SSH 접속시 Permissions 0644 for '~.pem' are too open. (0) | 2022.12.11 |
Spring boot) 빌드 실패 오류 (org.gradle.plugin.api-version ...) (2) | 2022.12.11 |
mybatis) int 자료타입 if test 무조건 안타던 문제 (0) | 2022.08.25 |
mysql)전화번호 masking 작업 (0) | 2022.08.21 |