2014-06-06 38 views
0

我運行構建腳本時出現錯誤:瞭解搖籃的微妙/ Groovy的任務

task pullInDeps(dependsOn: copyMod, description: 'Pull in all the module dependencies for the module into the nested mods directory') { 
if (pullInDeps == 'true') { 
    setSysProps() 
    def args = ['pulldeps', moduleName] 
    Starter.main(args as String[]) 
} 
} 

但是,我沒有得到一個錯誤運行時:

task pullInDeps(dependsOn: copyMod, description: 'Pull in all the module dependencies for the module into the nested mods directory') << { 
    if (pullInDeps == 'true') { 
     setSysProps() 
     def args = ['pulldeps', moduleName] 
     Starter.main(args as String[]) 
    } 
} 

注:定義任務時的差異是< <。此外,請注意,如果前者與doLast{}圍繞if statement工作。當它使用doFirst{}

- 這是來自vert.x gradle-template-example(但將它添加到我自己的項目中)。

我真的只是想更好地理解gradle/groovy,因爲我已經解決了這個問題。

編輯:

錯誤:

* What went wrong: 
A problem occurred evaluating script. 
> Could not find property 'Starter' on task ':pullInDeps'. 

我不知道爲什麼leftShiftdoFrist/Last()使得用於起動器的區別。

回答

1

有關task有一個綁定它的動作(閉包內部的邏輯),它使用leftShift運算符表示。下面是實際的語義:

task pullInDeps << { task action } 

本身傳遞到閉包作爲參數的任務,以便確定一個動作中使用。

這與doFirst { }doLast { }同義,它將任務本身作爲參數。

如果當你定義的任務:

task pullInDeps { } 

任務本身將被配置,而不是界定的任何行動,因此作爲參數的任務本身就不是在封閉可用。

請參閱Task Actions中的第二段。

+0

我想我應該提到pullInDeps也是一個gradle.properties(設爲true)的變量。這就是我相信你的意思:「因此,作爲參數的任務本身在閉包中不可用。」 ? 我明白'leftShift'操作符用於定義一個操作順序,但我不明白爲什麼它在這個特定任務中有所不同,因爲沒有其他任何操作。 – user2243357

+0

在這種情況下,您可以添加有關錯誤的詳細信息嗎? – dmahapatro

+0

剛剛添加錯誤以上編輯 – user2243357