반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • swift
    • 코딩테스트
    • 프로그래머스
    • 개발
    • 타입
    • 예제
    • 공부
    • 구축
    • kotlin
    • JSP
    • reduce
    • xcode
    • level1
    • 프로그래밍
    • Android
    • IT
    • Java
    • swfit
    • map
    • ios

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    Git submodule 사용시gradle 의존성 명시 누락으로 인한 오류(contextLoads() FAILED, java.lang.IllegalArgumentException)
    Debug Log/삽질기

    Git submodule 사용시gradle 의존성 명시 누락으로 인한 오류(contextLoads() FAILED, java.lang.IllegalArgumentException)

    2024. 2. 26. 17:53
    반응형

    상황

    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
      'Debug Log/삽질기' 카테고리의 다른 글
      • [짧]WSL 에러( Error: 0x80040326 Error code: Wsl/Service/0x80040326)
      • AWS) EC2 SSH 접속시 Permissions 0644 for '~.pem' are too open.
      • Spring boot) 빌드 실패 오류 (org.gradle.plugin.api-version ...)
      • mybatis) int 자료타입 if test 무조건 안타던 문제
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바