我正在用Gradle任务运行一些curl代码,并且我注意到如果我访问两次进程的文本,那么第二次访问总是失败。我注意到通过将process.text传递给XlmSlurper()。如果我第一次打印process.text,它会在sl crash中崩溃,如果我没有打印它,那么唾液就会起作用。 下面是一些说明这种行为的代码。首先是任务的版本失败:为什么访问Groovy进程的getText()两次会导致失败?
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
为什么添加/删除导致这种差异的最后一个printlns?
(也为什么会出现?帮助......在第二个版本的输出)使用./gradlew
在我在命令行中运行这两种情况下
其同样的问题如果使用getText()代替文本/