在gradle函数中执行bash命令

时间:2018-09-18 15:12:08

标签: gradle

我想在gradle中创建一个执行命令的通用函数。从任务中调用此函数。

函数executeCommand是从任务copyFile触发的,但是似乎未执行commandLine命令。我这样做是因为我需要从多个作业触发的通用ececuteCommand功能。

def executeCommand(execCmd) {
        try {
           exec {
                        println("execute $execCmd in .")
                        commandLine 'bash', '-c',  "ls -la"
                        commandLine 'bash', '-c',  "${execCmd}"
            }
        }
        catch(Exception e){
            println("Exception: $e")
        }
}

task copyFile {
    doLast {
        if(project.hasProperty('file')) {
            ext.myFile = file
            def execCmd="cp ${myFile} ."
            executeCommand(${execCmd})
        }
        else {
            println("Please specifiy argument files -Pfile=SRC_PATH")
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的脚本中存在语法错误,在执行过程中通常应该出现以下错误:

* What went wrong:
Execution failed for task ':copyFile'.
> Could not find method $() for arguments [build_djiuilz6w3giaud8hgmf0oze7$_run_closure2$_closure5$_closure6@57fdda61] on task ':copyFile' of type org.gradle.api.DefaultTask. (normally you should have an error when trying to execute it : **

您需要在copyFile.doLast{ }块中替换以下语句:

executeCommand(${execCmd})

具有:

executeCommand( execCmd)
// or:  executeCommand( "${execCmd}" )

注意:在exec {}函数的executeCommand块中,有两个对commandLine函数的调用:只有第二个函数才会生效,因此命令“ ls -al”将永远不会执行。

脚本的其余部分似乎有效,应该可以正常工作。