2014-03-27 56 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改变后不能运行。