아무거나

[Gradle] Gradle 다중 dependsOn 선언시 예측할 수 없는 종속성 순서에 대한 문제 발생 본문

Java & Kotlin/Gradle & Maven

[Gradle] Gradle 다중 dependsOn 선언시 예측할 수 없는 종속성 순서에 대한 문제 발생

전봉근 2022. 5. 26. 11:05
반응형
  • Gradle 다중 dependsOn 선언시 예측할 수 없는 종속성 순서에 대한 문제 발생
    • 아래와 같이 빌드관련 스크립트를 만들었지만 dependsOn 의 동작이 제대로 이루어지지 않아 myDeleteTask 태스크가 실행된 상태로만 ide 상의 폴더 구조만 표시되고 애플리케이션 구동시에 갑자기 삭제된 폴더들이 생기는 기괴한 현상이 발생한다. (실제 CI/CD 구동시에 해당 폴더자체는 삭제된 상태임 즉, myDeleteTask 만 실행되어있는 상태로 되어있음)
      ...
      
      task frontendNpmInstall(type: NpmTask) {
          dependsOn myDeleteTask
          ...
      }
      
      // Client Build Task
      def buildType = "build:bigbro"
      task npmBuild(type: NpmTask) {
          dependsOn frontendNpmInstall
          ...
      }
      
      // Client Build Static Files Copy (next.config.js)
      task copyNextBuildFiles(type: Copy) {
          dependsOn npmBuild
      
          ...
      }
      
      task fullBuild(type: Zip) {
          def tasks = [copyNextBuildFiles, clean, build]
          for (int i = 0; i < tasks.size() - 1; i++) {
              tasks[i + 1].mustRunAfter(tasks[i])
          }
          dependsOn(tasks)
      } 
      
    • 해당 현상을 확인해보니 dependsOn 가 동시다발적으로 실행될때 종속성 순서를 예측할 수 없다고 한다. 즉, 해결하기 위해선 직접 for문을 이용한 순차적으로 task 를 실행하는 기능을 직접 구현해줘야한다.
      ...
      
      task fullBuild(type: Zip) {
          def tasks = [frontendNpmInstall, npmBuild, copyNextBuildFiles, clean, build]
          for (int i = 0; i < tasks.size() - 1; i++) {
              tasks[i + 1].mustRunAfter(tasks[i])
          }
          dependsOn(tasks)
      } 
      
반응형
Comments