2014-03-27 84 views
0

我試圖用「doFirst」方式調用Gradle中的方法。我的代碼看起來像Gradle:doFirst中的變量重新分配

task nightlyBuild(type:MavenTask) { 
ext.list = 'this should change' 
doFirst { 
    ext.list = getList() 
      println ext.list 
} 

    mvnCmdLine "clean deploy -am -amd ${ext.list}" 
} 

mvnCmdLine是在爲我呼籲行家一類的方法(根據不同的操作系統)

輸出看起來像這樣

-pl com.blah.foo:bar 
mvn clean deploy -am -amd this should change 

我的問題是,當我運行這個,println ext.list打印我期待看到的內容,但是當maven命令執行時,它落入「這應該改變」

似乎doFirst不能控制reas在變量之外簽署一個新的值。有一些特殊類型的回報?還是我不創建全局變量?

+0

'mvnCmdLine「clean deploy -am -amd $ {ext.list}」''似乎在錯誤的地方。它需要進入'doFirst'之類的東西。 –

+0

更新:幾個星期前,我想到了這一點,爲後代更新。我意識到的是,你不能在配置階段運行doFirst,它只是一個執行階段的操作。所以我看到的是在我的任務完成配置任務後發生的doFirst。 – mbabineau

回答

0

我已經想通了。這些階段對於Gradle非常重要。

因此,配置發生在執行前,以及doFirst和doLast之前。所以邏輯應該要麼像

task nightlyBuild(type:MavenTask) { 
    ext.list = 'this should change' 
    doFirst { 
     ext.list = getList() 
      println ext.list 
    } 

    doLast { 
     mvnCmdLine "clean deploy -am -amd ${ext.list}" 
    } 
} 

Basicly的mvnCmdLine是在配置階段中運行和ext.list改變後不能運行。