11 Stimmen

Wie führe ich ant.java richtig von gradle aus?

Ich versuche, ein jar aufzurufen, aber ich sehe keine Ausgabe, wenn ich den Befehl ohne Args ausführe, und wenn ich tun mit args ausführen, erhalte ich folgende Fehlermeldung:

[ant:java] The args attribute is deprecated. Please use nested arg elements.
[ant:java] Java Result: 1

Wie rufe ich ant.java so auf, dass ich eine Ausgabe sehe und Argumente übergeben kann?

task compressJs(){
  ant.java(jar:"lib/yuicompressor-2.4.6.jar",fork:true,args:['js/file.js', '-o', 'build/js/file.js'])
}

17voto

Chris Dail Punkte 24971

Ihre Args sollten wie folgt angegeben werden:

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")
}

Im Grunde ist es das Gleiche wie bei Ameisen, außer dass man den Groovy-Style Markup Builder anstelle von XML verwendet.

Standardmäßig wird die Ausgabe auf dem Bildschirm angezeigt. Wenn Sie sie umleiten möchten, setzen Sie die Eigenschaft "Ausgabe".

8voto

Peter Niederwieser Punkte 116677

Wie ich bereits sagte, ist es am besten, die JavaExec Aufgabe. Um einen Jar auszuführen, können Sie Folgendes tun:

task exec(type: JavaExec) { 
    main = "-jar" 
    args relativePath("lib/yuicompressor-2.4.6.jar") 
    args ... // add any other args as necessary 
}

Die Kommentare in http://issues.gradle.org/browse/GRADLE-1274 auch erklären, wie man die Ausgabe von ant.java sondern mit JavaExec ist die bessere Lösung.

1voto

thoredge Punkte 11646

Um die Ausgabe zu erhalten, setzen Sie das Flag --info in gradle oder setzen Sie die Eigenschaft outputproperty in ant.java:

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)
}

0voto

Peter Niederwieser Punkte 116677

Die Ant-Aufgabe muss in der Datei Ausführung Phase, nicht die Konfiguration Phase:

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

Sie können auch die JavaExec-Aufgabe von Gradle verwenden. Siehe die Dokumentation.

0voto

Nishok Punkte 1

Zusätzlich zur Antwort von Chris Dail können Sie auch etwas wie das folgende verwenden

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

Dies ermöglicht es, alle Argumente in einer einzigen Zeile zu deklarieren, ähnlich wie bei der Verwendung in ANT.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X