2012-10-14 3 views
5

Ich versuche JBoss TattleTale von einem Ant-Build-Datei ausführen. Normalerweise laufe ich es von der Kommandozeile wie folgt:Was ist falsch mit diesen Ant/JVM Args?

java -Xmx512m -jar /home/myuser/jars/tattletale.jar /home/myuser/projects/lib /home/myuser/tmp/tt 

wo /home/myuser/projects/src ist das Quellverzeichnis, wo alle meine JAR-Dateien sind, und wo /home/myuser/tmp/tt ist das Ausgabeverzeichnis, wo ich alle tattletale Berichte platzieren.

Im Ant Buildfile Ich verwende die folgenden:

<echo message="Running tattle-tale..."/> 
<java fork="true" failonerror="true" jar="/home/myuser/jars/tattletale.jar"> 
    <arg value="Xmx512m"/> 
    <arg value="/home/myuser/projects/lib"/> 
    <arg value="/home/myuser/tmp/tt"/> 
</java> 

Als ich dieses Ziel von der Kommandozeile ausgeführt werden:

run-tattletale: 
    [echo] Running tattle-tale... 

BUILD SUCCESSFUL 
Total time: 3 seconds 

Als ich /home/myuser/tmp/tt gehe ich sehe keinen Ausgang, Die Ant-Ausgabe zeigt jedoch SUCCESS ohne Fehler oder Warnungen. Sieht mein <arg> s richtig aus, und wenn nicht, wie sollte ich sie ändern? Wenn sie richtig aussehen, was kann ich zum Debuggen tun? Danke im Voraus!

Antwort

3

Die erste args ist ein JVM-Argument kein Programm Argument so <arg> die falsche Syntax. In diesem Fall ist es einfacher, den Parameter maxmemory der Task java zu verwenden.

So entfernen Sie die erste <arg> und setzen maxmemory=512m in den <java> Block.

+0

Dank @Mike Q (+1) - aber ich sehe immer noch nichts im Ausgabeverzeichnis generiert wird. – IAmYourFaja

6

Zwei Dinge:

  1. Versuchen Sie, die Debug-Option zu verwenden, wenn Ant ausgeführt wird, und die Ausgabe in eine Log-Datei speichern. Dann schau dir die Log-Datei an. Es zeigt Ihnen, wie es den Java-Befehl ausführt. Das hilft Ihnen herauszufinden, wo sich die Ant <java> von der Art und Weise unterscheidet, wie Sie Java direkt von der Befehlszeile aus ausführen. Es gibt Ihnen die Möglichkeit, Ihre <java> Aufgabe zu tweeken.

  2. Wenn ein Parameter für den java Befehl selbst ist, verwenden Sie <jvmarg> und nicht <arg>:

Ein Beispiel:

<echo message="Running tattle-tale..."/> 
<java fork="true" 
    failonerror="true" 
    jar="/home/myuser/jars/tattletale.jar"> 
    <jvmarg value="-Xmx512m"/> <!-- Note the dash! --> 
    <arg value="/home/myuser/projects/lib"/> 
    <arg value="/home/myuser/tmp/tt"/> 
</java> 

bereiten und läuft mit ant -d | tee ant.out wenn Sie unter Unix/Linux. Unter Windows müssen Sie ant -d > ant.out.txt eingeben, wodurch die Ausgabe in ant.out.txt gespeichert wird. Die Ausgabe wird jedoch nicht angezeigt, während ant ausgeführt wird.

1

Wenn im Zielverzeichnis keine Ausgabe angezeigt wird, liegt dies möglicherweise daran, dass 1) im angegebenen Eingabeverzeichnis kein Archiv vorhanden ist oder 2) der Tattletale-Prozess fehlschlägt. Im Falle eines Fehlers oder einer Ausnahme scheint der Tattletale-Prozess den Exit-Code 0 zurückzuliefern, und es macht ant, dass die Prozessausführung erfolgreich ist.

Zum Debuggen, ich schlage vor, Sie zu gewährleisten angegebene Verzeichnis korrekt ist und Java-Archiv (JAR-Dateien) und analysieren die Standardausgabe/Fehler von tattletale hergestellt.

Beispiel:

<echo message="Running tattle-tale..."/> 
<java fork="true" 
    failonerror="false" 
    errorproperty="errorproperty" 
    outputproperty="outputproperty" 
    jar="/home/myuser/jars/tattletale.jar"> 
    <jvmarg value="-Xmx512m"/> <!-- Note the dash! --> 
    <arg value="/home/myuser/projects/lib"/> 
    <arg value="/home/myuser/tmp/tt"/> 
</java> 
<echo message="stdout>> ${outputproperty}"/> 
<echo message="stderr>> ${errorproperty}" /> 

Hinweis: - failonerror vorübergehend falsch Zweck für das Debuggen nur.