我有几个任务通过psql执行不同的SQL脚本。
task runScript1(type: Exec) {
commandLine 'cmd', '/c', "psql -f script1.sql"
}
task runScript2(type: Exec) {
commandLine 'cmd', '/c', "psql -f script2.sql"
}
现在我想编写一个通用的exec任务,并只将脚本名称传递给它。
ext {
scriptName = ''
}
task runScriptGeneric(type: Exec) {
commandLine 'cmd', '/c', "psql -f ${scriptName}"
}
task runScript1() {
scriptName = 'script1.sql'
}
runScript1.finalizedBy runScriptGeneric
task runScript2() {
scriptName = 'script2.sql'
}
runScript2.finalizedBy runScriptGeneric
不幸的是这种方法不起作用。 scriptName
任务中runScriptGeneric
保持为空。
我怀疑这与Exec
类型有关,因为以下简单任务运行良好。
ext {
scriptName = ''
}
task runScriptGeneric() {
doLast {
println "${scriptName}"
}
}
task runScript1() {
doLast {
scriptName = 'script1.sql'
}
}
runScript1.finalizedBy runScriptGeneric
task runScript2() {
doLast {
scriptName = 'script2.sql'
}
}
runScript2.finalizedBy runScriptGeneric
我不希望将其作为命令行参数(-PscriptName
)传递,因为我想保留每个脚本的各个任务。有没有其他方法可以将scriptName
从每个单独的任务传递给通用任务?
答案 0 :(得分:0)
实际上,它不是我的问题的答案,但它是我可以忍受的解决方案。
我创建了一个动态任务,而不是将变量传递给执行脚本:
['Script1', 'Script2'].each {taskName ->
task "run${taskName}"(type: Exec) {
commandLine 'cmd', '/c', "psql -f ${taskName}"
}
}