2010-05-04 51 views
42

A)gradle中這些任務定義語法之間的區別是什麼?

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

B)

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

我注意到,與B型,在該任務中的代碼似乎被執行打字gradle -t時 - 螞蟻呼應了「建設」,即使剛剛上市所有各種可用的任務。該描述實際上也以類型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' } 

事實上,第一語法相當於:

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

所以,在你上面的例子,對於語法A的描述不gradle這個-t因爲代碼顯示該設置描述在執行任務之前不會執行,在運行gradle -t時不會發生。

有關語法B中做了ant.echo()被用於運行的gradle的每次調用的代碼,包括gradle這個-t

要同時提供一個操作執行和您可以執行的任務的說明作者:

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

因此,如果你有兩個需要執行的代碼來配置任務以及調用任務時要執行的代碼,帶doLast閉包的語法B是要走的路。 – bergyman 2010-05-05 15:29:47

+0

看起來'''任務定義語法正在被[Gradle 3.0]刪除(https://github.com/gradle/gradle/blob/master/design-docs/gradle-3.0.md#clean-up-任務DSL和層次結構)? – mkobit 2016-05-14 17:08:36

相關問題