如何通过带有任意数量参数的Gradle任务运行程序

如何通过带有任意数量参数的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

Gradle(我使用的是最新版本2.12)提供了type:Exec parent任务,但我不知道如何在多个参数中使用它

例如,我需要删除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
怎么做?

这项任务

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处理。

错误总是“任务未声明任何输出”,还有一个问题,可能是知道如何从一个任务传递另一个任务的参数?这些文件在我看来是模糊的。我认为,最好就此提出一个新问题。