2010-05-04 7 views
42

A)gradle에서 이러한 작업 정의 구문의 차이점은 무엇입니까? 단지 나열 할 때 개미도 '구축'밖으로 에코 -

task build << { 
    description = "Build task." 
    ant.echo('build') 
} 

B)는

task build { 
    description = "Build task." 
    ant.echo('build') 
} 

나는 gradle -t가 입력 할 때 B 형과 함께 작업 내에서 코드가 실행되는 것 같다 통지 모든 다양한 사용 가능한 작업. 설명은 실제로 유형 B와 함께 표시됩니다. 그러나 유형 A에서는 사용 가능한 타스크를 나열 할 때 코드가 실행되지 않고 gradle -t을 실행할 때 설명이 표시되지 않습니다. 문서는이 두 가지 구문 (내가 발견 한 것)의 차이점을 보이지 않는 것으로 보이며, 어느 방식 으로든 작업을 정의 할 수 있습니다.

답변

54

첫 번째 구문은 작업을 정의하고 작업 실행시 실행할 코드를 제공합니다. 두 번째 구문은 작업을 정의하고 작업을 구성하기 위해 즉시 실행될 코드를 제공합니다. 예를 들어 :

task build << { println 'this executes when build task is executed' } 
task build { println 'this executes when the build script is executed' } 

사실, 첫 번째 구문은 동일합니다 : 구문 A에 대해, 위의 예에서

task build { doLast { println 'this executes when build task is executed' } } 

그래서 설명은 코드 때문에 Gradle을 -t에 표시되지 않습니다 어떤 설명은 작업이 실행될 때까지 실행되지 않습니다. 이것은 gradle -t를 실행할 때 발생하지 않습니다. Gradle을 포함하여 구문 B의 경우

ant.echo()가 Gradle을 모든 호출에 대한 실행 수행하는 코드가 실행하는 작업과 당신도 할 수있는 작업에 대한 설명을 모두 제공하기 위해

을 -t 의 : 당신이 작업뿐만 아니라 코드를 구성하기 위해 실행해야 할 두 코드 작업이 호출 될 때 실행되는이있어이 경우

task build(description: 'some description') << { some code } 
task build { description = 'some description'; doLast { some code } } 
+1

하는 doLast 폐쇄와 구문 B 길을 가야하는 것입니다. – bergyman

+0

'<< '태스크 정의 구문이 [Gradle 3.0] (https://github.com/gradle/gradle/blob/master/design-docs/gradle-3.0.md#clean-up- task-dsl-and-hierarchy)? – mkobit