我想在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")
}
}
}
答案 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”将永远不会执行。
脚本的其余部分似乎有效,应该可以正常工作。