我试图调用一个jar,但是当我运行不带args的命令时,我没有看到任何输出,当我使用args运行时,我得到以下错误:
[ant:java] The args attribute is deprecated. Please use nested arg elements.
[ant:java] Java Result: 1
我如何调用ant.java这样一种方式,我可以看到输出并可以传递参数?
task compressJs(){
ant.java(jar:"lib/yuicompressor-2.4.6.jar",fork:true,args:['js/file.js', '-o', 'build/js/file.js'])
}
你的参数应该这样指定:
ant.java(jar:"lib/yuicompressor-2.4.6.jar",fork:true) {
arg(value: "js/file.js")
arg(value: "-o")
arg(value: "build/js/file.js")
}
除了使用Groovy样式标记构建器而不是XML之外,它与ant所做的几乎相同。
默认情况下,您的输出将显示在屏幕上。如果你想重定向它,设置'output'属性
如前所述,最好使用JavaExec
任务。要执行Jar,您可以这样做:
task exec(type: JavaExec) {
main = "-jar"
args relativePath("lib/yuicompressor-2.4.6.jar")
args ... // add any other args as necessary
}
http://issues.gradle.org/browse/GRADLE-1274中的注释也解释了如何捕获ant.java
的输出,但使用JavaExec
是更好的解决方案。
要获得输出,请在gradle上设置——info标志或在ant.java上设置outputproperty:
task compressJs(){
ant.java(outputproperty: 'cmdOut', jar:"lib/yuicompressor-2.4.6.jar",fork:true,args:['js/file.js', '-o', 'build/js/file.js'])
println(ant.project.properties.cmdOut)
}
Ant任务需要在执行阶段调用,而不是在配置阶段调用:
task compressJs() << { // note the <<
ant.java(...)
}
你也可以使用Gradle的JavaExec任务。
除了Chris Dail的答案之外,你还可以使用如下内容
ant.java(jar:"lib/yuicompressor-2.4.6.jar",fork:true) {
arg(line: "js/file.js -o build/js/file.js")
}
这允许在一行中声明所有的参数,非常类似于ANT中的用法。