Gradle Exec 任务不在远程主机上以 psql 开头

Posted

技术标签:

【中文标题】Gradle Exec 任务不在远程主机上以 psql 开头【英文标题】:Gradle Exec Task not starting with psql on remote host 【发布时间】:2018-03-31 05:37:27 【问题描述】:

我需要在 Gradle(版本 4.2.1)中的远程数据库上执行 SQL 脚本。所以我用 Exec 任务尝试了它。当数据库在我的本地计算机上时,该任务有效。对于远程主机,任务未启动。

这些是任务(第一个工作完美)。

task psqlLocalExec(type: Exec) 
  commandLine 'cmd', '/c', 'psql -f myscript.sql'


task psqlRemoteExec(type: Exec) 
  commandLine 'cmd', '/c', 'psql -h my.remote.host -f myscript.sql' // not working

命令行输出(几分钟后我取消了):

C:\myproject>gradlew :proj:psqlRemoteExec --stacktrace
<-------------> 0% EXECUTING [3m 43s]
> :proj:psqlRemoteExec

在 cmd(没有 Gradle)上该命令有效。

【问题讨论】:

试试commandLine 'cmd', '/c', 'psql', '-h', 'my.remote.host', '-f', 'myscript.sql'commandLine 'cmd /c psql -h my.remote.host -f myscript.sql'.split(' ') 我已经试过了,不幸的是同样的负面结果。 你可以在没有 gradle 的情况下从命令行运行命令吗? Gradle 会将整个命令(包括cmd /c)发送给操作系统执行。确保将其包含在命令行测试中 我猜您需要将一个选项传递给psql 以在执行脚本后退出。我看到here 你输入\q and ENTER 以从命令行退出。我猜有一个命令行选项可以自动退出,或者你可以在 SQL 脚本的末尾添加一些东西 【参考方案1】:

我的Password File Configuration 在脚本中有错误。要修复可以设置环境变量的问题:

task psqlRemoteExec(type: Exec) 
  environment 'PGPASSFILE', 'path/to/pgpass.conf'
  commandLine 'cmd', '/c', 'psql -h my.remote.host -f myscript.sql'

【讨论】:

以上是关于Gradle Exec 任务不在远程主机上以 psql 开头的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数从 gradle exec 任务传递到命令行

Gradle 4.0 不在命令行中显示已执行的任务

Gradle 分发任务输出文件不在 ZIP 的根目录下

颤振 gradle 任务 assembleDebug 失败

如何让我的 gradle 测试任务为不在 maven Central 上的库使用 python pip install?

异常:Gradle 任务 assembleDebug 失败,退出代码为 1(在 web 上运行但不在模拟器上)