如何从gradle正确执行ant.java?

时间:2011-08-09 02:25:09

标签: java ant groovy jar gradle

我正在尝试调用jar,但是当我运行没有args的命令时没有看到任何输出,当我执行运行args时,我收到以下错误:< / p>

[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'])
}

5 个答案:

答案 0 :(得分:15)

你的args应该这样指定:

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'属性。

答案 1 :(得分:8)

正如我之前所说,最好使用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是更好的解决方案。

答案 2 :(得分:1)

要获取输出,请在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)
}

答案 3 :(得分:0)

需要在执行阶段调用Ant任务,而不是配置阶段:

task compressJs() << { // note the <<
  ant.java(...)
}

您也可以使用Gradle的JavaExec任务。请参阅文档。

答案 4 :(得分:0)

除了Chris Dail的答案之外,你还可以使用类似的东西

ant.java(jar:"lib/yuicompressor-2.4.6.jar",fork:true) {
    arg(line: "js/file.js -o build/js/file.js")
}

这允许我们在一行中声明所有参数,非常类似于ANT中的用法。