【发布时间】:2016-05-14 13:01:24
【问题描述】:
我正在运行一些带有 Gradle 任务的 curl 代码,我注意到如果我访问该进程的文本两次,那么第二次访问总是失败。我注意到通过将 process.text 传递给 XlmSlurper()。如果我首先 printlned process.text 它会在 slurped 时崩溃,如果我没有 println 它然后 slurped 工作。 这是一些说明这种行为的代码。首先是失败的任务版本:
task hello {
println "****** HELLO ******"
def process = ['curl', '-X', 'POST', '-H', 'Accept: Application/xml', '-H', 'Content-Type: application/json', "http://itemid.sea.redacted.com/item_ids", '-d', '{"user":"Y2VxYnVpbGRhZ2VudDpCdTFsZCE=","request":"guid"}'].execute()
process.waitFor()
println "err.text"
println process.err.text
println "process.text 1 is:"
println process.text
println "process.text 2 is:"
println process.text
}
执行此操作时,输出为:
****** HELLO ******
err.text
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 141 0 85 100 56 2412 1589 --:--:-- --:--:-- --:--:-- 2428
process.text 1 is:
<?xml version="1.0" encoding="utf-8"?><long xmlns="http://redacted.com/">121144</long>
process.text 2 is:
Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
java.lang.IllegalArgumentException: android.compileSdkVersion is missing!
at com.android.build.gradle.internal.SdkHandler.initTarget(SdkHandler.java:80)
at com.android.build.gradle.BasePlugin.ensureTargetSetup(BasePlugin.groovy:462)
但是如果最后两行println被注释掉就成功了:
task hello {
println "****** HELLO ******"
def process = ['curl', '-X', 'POST', '-H', 'Accept: Application/xml', '-H', 'Content-Type: application/json', "http://itemid.sea.redacted.com/item_ids", '-d', '{"user":"Y2VxYnVpbGRhZ2VudDpCdTFsZCE=","request":"guid"}'].execute()
process.waitFor()
println "err.text"
println process.err.text
println "process.text 1 is:"
println process.text
// println "process.text 2 is:"
// println process.text
}
哪个有输出:
****** HELLO ******
err.text
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 141 0 85 100 56 1977 1303 --:--:-- --:--:-- --:--:-- 2023
process.text 1 is:
<?xml version="1.0" encoding="utf-8"?><long xmlns="http://redacted.com/">121145</long>
:help
Welcome to Gradle 2.2.1.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see a list of command-line options, run gradlew --help
BUILD SUCCESSFUL
为什么添加/删除那些最后的 println 会导致这样的差异?
(还有为什么第二个版本的输出中有 :help ...?)
在这两种情况下,我都使用 ./gradlew 从命令行运行
如果用getText()代替text/也是同样的问题
【问题讨论】:
标签: groovy gradle android-gradle-plugin