如何通过带有任意数量参数的Gradle任务运行程序
Gradle(我使用的是最新版本2.12)提供了type:Exec parent任务,但我不知道如何在多个参数中使用它 例如,我需要删除Postgresql数据库如何通过带有任意数量参数的Gradle任务运行程序,gradle,Gradle,Gradle(我使用的是最新版本2.12)提供了type:Exec parent任务,但我不知道如何在多个参数中使用它 例如,我需要删除Postgresql数据库 dropdb --if-exists mydbname 但这是行不通的 task dropDatabase(type: Exec) { commandLine 'dropdb', '--if-exists', 'mydbname' } 这也 task dropDatabase(type: Exec) { comma
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
怎么做?这项任务
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
更准确地说,是从它的管道中
实际上,您不能在命令行
属性中使用管道。解决方案是在bash解释器中运行命令。为此,请使用bash
命令的-c
选项:
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处理。错误总是“任务未声明任何输出”,还有一个问题,可能是知道如何从一个任务传递另一个任务的参数?这些文件在我看来是模糊的。我认为,最好就此提出一个新问题。