使用doLast的Gradle exec任务失败

时间:2015-01-13 19:06:17

标签: gradle

我尝试仅在自上次构建后更新文件时才运行exec任务。我最初的尝试看起来像这样:

task generateLocalizedStrings(type:Exec) {
    ext.srcFile = file('../../../localization/language-files/en_US/wdmobilestringres.properties')
    ext.destDir = new File("src/main/res")
    inputs.file srcFile
    outputs.dir destDir

    doLast {
        println "Executing localization script"
        workingDir '../../../localization/'
        commandLine 'python', 'localizationScript.py'
    }
}

然而,这与" execCommand == null!"

失败

我找到了一个解决方法,但我真的更喜欢一个合适的解决方案。

task generateLocalizedStrings(type:Exec) {
    ext.srcFile = file('../../../localization/language-files/en_US/wdmobilestringres.properties')
    ext.destDir = new File("src/main/res")
    inputs.file srcFile
    outputs.dir destDir

    workingDir '../../../localization/'
    commandLine 'python', 'dummyScript.py'

    doLast {
        println "Executing localization script"
        workingDir '../../../localization/'
        commandLine 'python', 'localizationScript.py'
    }
}

2 个答案:

答案 0 :(得分:10)

一种选择是使任务成为通用任务并显式调用exec dsl。例如。从这个:

task("MyTask", type: Exec) {

    doLast {
        commandLine "your commandline"
    }
}

到这个

task("MyTask") {

    doLast {
        exec {
            commandLine "your commandline"
        }
    }
}

答案 1 :(得分:3)

您需要摆脱doLast阻止,而是在该阻止之外配置workingDircommandLine。 (在运行后配置任务太晚了。)