Gradle(我使用的是上一版本2.12)提供了类型:Exec父任务,但我无法找到如何将它与多个参数一起使用。
例如,我需要删除Postgresql数据库
dropdb --if-exists mydbname
但这不起作用
task dropDatabase(type: Exec) {
commandLine 'dropdb', '--if-exists', 'mydbname'
}
这也是
task dropDatabase(type: Exec) {
commandLine 'dropdb'
args '--if-exists', 'mydbname'
}
我尝试了很多组合,但都失败了,错误:输出没有设置或错误的参数。
但我需要像这样运行smth:
gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres
怎么做?
答案 0 :(得分:1)
任务
task dropDatabase(type: Exec) {
commandLine 'dropdb', '--if-exists', 'mydbname'
}
是对的。我测试它,它完美地工作。据我所知,你的问题来自这个命令
gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres
,更确切地说,来自其中的|
管道。
实际上,您无法在commandLine
属性中使用管道。解决方案是在bash解释器中运行您的命令。为此,请使用-c
命令的bash
选项:
task myTask(type: Exec) {
commandLine "bash" "-c" "gunzip -c /Users/name/Downloads/db_31_03_2016_01_18_17.gz | psql -U postgres"
}
使用此解决方案,管道由bash解释器处理,而不是由gradle处理。