2012-11-21 3 views
18

gradle 빌드 파일에는 특정 작업에 대해 실행 된 항목을 지정하는 여러 가지 방법이 있습니다. doFirst 메서드는 작업 항목을 작업 스택의 맨 위에 배치하여 항목이 나머지 작업 스택보다 먼저 실행되도록합니다. 주 작업 전에 몇 가지 준비 항목을 수행해야하는 경우 매우 편리합니다. 사실 doFirst를 여러 번 호출하면 마지막 호출에서 추가 된 항목이 가장 먼저 실행됩니다.gradle doLast philosophy

이론적으로 doLast는 비슷한 작업을 수행해야하지만 doLast는 작업의 주 실행이 완료된 후에 호출해야합니다. 그러나 gradle.build 파일에서 doLast 이후에 doLast를 호출하고 주 작업에 무언가를 추가하면 gradle 1.2에서 주 작업 항목이 마지막으로 호출 된 항목이됩니다. 예를 들어, 다음 Gradle을 빌드 파일 :

:myTask 
myTask doFirst call two 
myTask doFirst call one 
myTask main execution block 
myTask doLast 
myTask more main execution block 

BUILD SUCCESSFUL 

Total time: 1.585 secs 

내 질문은 이것이다 :

task myTask 

myTask << { 
    println "myTask main execution block" 
} 

myTask.doFirst { 
println "myTask doFirst call one" 
} 

myTask.doFirst { 
    println "myTask doFirst call two" 
} 

myTask.doLast { 
    println "myTask doLast" 
} 

myTask << { 
    println "myTask more main execution block" 
} 

다음과 같은 출력을 생성합니다 (그것을 단순히 작업의 마지막에 단계를 추가 할 doLast의 의도인가 doFirst가 처음으로 tacks처럼)? 그렇다면 doLast는 doFirst를 대칭으로 제공하는 것을 제외하고는 무의미 해 보입니다. 사용자는 단순히 myTask < < {...}을 사용하여 끝에 무언가를 추가 할 수 있습니다. 나는 doLast가 "doLast"항목이 기본 실행 블록 다음에 완료 될 것임을 확신 할 것입니다.

이것은 단순히 gradle의 doLast가 작동하도록되어있는 방법입니까, 아니면이 버그입니까? (또는 doLast를 호출 한 후 기본 실행 블록에 무엇인가를 추가하는 것은 어리 석다. 다른 실행 블록을 집어 넣은 후 간단한 실수였다.)

답변

30

<<doLast의 별칭이므로 모든 항목이 예상대로 작동합니다.