2013-07-03 3 views
11

Gradle을 사용하여 최종 출력 파일을 작성한 후에 2 가지 작업을 수행하려고합니다. 로컬 version.properties 파일을 갱신하고 마지막 최종 출력을 아카이브 할 특정 디렉토리로 복사하십시오. 이미 방금 설명한 2 가지 메서드가 이미 구현되었다고 가정합니다 (및 archiveOutputFile()). 내가 myBuildTask를 부를 것이다 여기Gradle에서 작업 종속성 또는 task.doLast를 사용하는 것이 더 낫습니까?

task myBuildTask(dependsOn: assembleRelease) << { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

그리고 :

assembleRelease.doLast { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

대안 B :

나는

대안 A를 ...이 작업을 수행하는 가장 좋은 방법은 무엇 궁금 알고있어 대신 assembleRelease 대체품 A와 같습니다.

이렇게하는 것이 권장되는 방법은 무엇입니까? 하나의 장점이 다른 것보다 많습니까? 몇 가지 설명을 좀주세요 ... :)

답변

13

언제든지 새로운 활동을 별도의 작업으로 모델링 할 수 있습니다. (귀하의 경우에는, 당신은 이상의 작업을 추가 할 수 있습니다.) 이것은 많은 장점이 있습니다

  • 더 나은 피드백을 현재 어떤 활동을 실행 또는 모든 수확 작업의 입력과 출력을 (선언
  • 능력을 실패하기로)이에서 Gradle을 병렬
  • 에서 작업을 실행하는 기존 작업 유형을
등을
  • 더 많은 가능성을 재사용 할 수
  • 기능을 제공 혜택

    때때로 작업을 별도의 작업으로 모델링하는 것이 쉽지 않습니다. (예를 들어, 기존 작업의 출력을 후 처리 할 필요가있는 경우, 별도의 작업으로이 작업을 수행하면 후속 작업에서는 원래 작업이 up-to-date이되지 않습니다.) 그때에만 작업이 기존 작업 doLast.

  • +1

    어떻게 이러한 작업 종속성을 만들 것을 권장합니까? 하나의 태스크가 전체 프로젝트를 어셈블하기를 원하고 (기본적으로 "assembleRelease'를"대체 "),이 두 태스크는 모두'assembleRelease'를 성공적으로 ** 수행 한 후에 만 ​​** 실행되어야합니다. 그 (것)들 사이에서, 순서는 진짜로 적합하지 않다. –

    +6

    'myBuildTask.dependsOn (updateVersionProperties, archiveOutputFile); updateVersionProperties.dependsOn (assembleRelease); archiveOutputFile.dependsOn (assembleRelease)' –

    관련 문제