如何将代码从gradle任务配置步骤移动到任务执行

时间:2016-07-13 08:17:15

标签: java gradle build.gradle gradlew

我有gradle任务:

task immportMyData(type: Exec) {
def dumnp= ""

new File("${System.env.MY_HOME}/export").eachDir() { dir ->
    dumpName = dir.getName()
}

workingDir "${System.env.MY_HOME}/../test"
standardOutput = new ByteArrayOutputStream()

 ext.output = {
    return standardOutput.toString()
 } 
}

...

据我所知,它的任务配置,因为它每次执行。

那么,有没有什么方法可以将代码从爆燃步骤转移到任务主体(执行步骤)? 有些人认为是这样。

task immportMyData(type: Exec) << {
   //code from configuration
}

another worlds 

   task immportMyData(type: Exec) **<<** {
def dumnp= ""

new File("${System.env.MY_HOME}/export").eachDir() { dir ->
    dumpName = dir.getName()
}

workingDir "${System.env.MY_HOME}/../test"
standardOutput = new ByteArrayOutputStream()

 ext.output = {
    return standardOutput.toString()
 } 
}

我查了gradle docs,但没有运气

1 个答案:

答案 0 :(得分:0)

我想你可能误解了Exec任务的作用。 Exec用于运行外部命令,即另一个进程。因此,它需要您指定其commandLine属性,以便它在执行时执行任何操作。有关详细信息,请参阅here

看起来你实际上要做的是“在任务执行期间运行一些代码”,这可以使用常规(非Exec)任务来实现。像这样:

task importMyData {
    //Code to configure task

    doLast {
        //Code to run at execution time, maybe this?:
        new File("${System.env.MY_HOME}/export").eachDir() { dir ->
            ext.dump = dir.getName()
        }
    }
}

希望这有帮助。