我正在将此任务作为Ant脚本中较大目标的一部分运行。它在Windows命令提示符中执行命令,并将输出路由到临时目录中的文本文件。我已经更改了URL参数以保护敏感信息。
<exec executable="cf.cmd" output="${java.io.tmpdir}/cmd_out.txt" failonerror="true" vmlauncher="false">
<arg value="curl" />
<arg value="POST" />
<arg value="http://www.google.com/v2/routes" />
<arg value="--body" />
<arg value="'{"host": "${old.app.name}", "domain_guid": "${domain.guid}", "space_guid": "${space.guid}"}'" />
</exec>
从Ant的详细日志中,此任务生成以下命令:
Current OS is Windows 7
[exec] Output redirected to C:\Users\foo\AppData\Local\Temp\cmd_out.txt
[exec] Executing 'cf' with arguments:
[exec] 'curl'
[exec] 'POST'
[exec] 'http://www.google.com/v2/routes'
[exec] '--body'
[exec] ''{"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}''
[exec]
[exec] The ' characters around the executable and arguments are
[exec] not part of the command.
运行时,此任务在cmd_out.txt中生成以下输出:
{
"code": 1001,
"description": "Request invalid due to parse error: lexical error: invalid char in json text.\n {host: foo, domain_guid\n (right here) ------^\n
"error_code": "CF-MessageParseError
"types": [
"MessageParseError
"Error"
],
"backtrace": []
}
但是,如果我在Windows命令提示符中手动执行此相同命令:
cf curl POST http://www.google.com/v2/routes --body '{"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}'
然后我得到了正确的结果。在此处发布它没有意义,但它是成功消息而不是无效的解析错误消息。
如果我在手动Windows命令提示符下运行此命令(注意JSON主体周围没有单引号),那么我得到与Ant脚本相同的错误:
cf curl POST http://www.google.com/v2/routes --body {"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}
我在这里不知所措。从我所看到的,Ant运行与我手动执行的命令相同的命令。但是Ant版本失败了,手动版本也成功了。谁能看到我做错了什么?
答案 0 :(得分:2)
看起来这些空间导致了问题。将exec任务更改为以下内容非常有用:
<exec executable="cf.cmd" output="${java.io.tmpdir}/cmd_out.txt" failonerror="true" vmlauncher="false">
<arg value="curl" />
<arg value="POST" />
<arg value="http://www.google.com/v2/routes" />
<arg value="--body" />
<arg value="'{"host":"${old.app.name}","domain_guid":"${domain.guid}","space_guid":"${space.guid}"}'" />
</exec>