2012-04-12 5 views
6

Ich benutze Ant, um ein Java-Programm zu starten.Ant Java-Aufgabe: Wie Ausgabe an die Konsole und eine Datei erhalten - immer Build-Ausgabe ohne Shell-Umleitung

Ich möchte nicht die Ausgabe "verlieren", nachdem das Programm beendet wird. Also verwende ich die Eigenschaft 'output', um die Ausgabe in einer Datei zu speichern.

<java classname="..." fork="true" output="....txt"> 

Leider habe ich keine Konsolenausgabe mehr. Was wäre eine gute Möglichkeit, die Ausgabe auf der Konsole und in einer TXT-Datei zu haben.

Suche nach einer Alternative zu

ant mytast > myFile.txt 

, weil ich nicht will, dass die "user" Shell-Umleitung verwenden hat "> ..". . Wenn er nicht umleiten will, ist die Ausgabe verloren.

+0

Sie können den Befehl 'tee' verwenden. Sehen Sie sich diese [Seite] an (http: //en.wikipedia.org/wiki/Tee_% 28Kommando% 29). – dash1e

+0

Dies beruht auf einem externen Betriebssystembefehl. Nicht sehr tragbar. –

Antwort

7

Ant hat eine Möglichkeit, die Ausgabe aufzuzeichnen. http://ant.apache.org/manual/Tasks/recorder.html.

Ein Rekorder ist ein Listener für den aktuellen Buildprozess, der die Ausgabe in eine Datei aufzeichnet.

Mehrere Rekorder können gleichzeitig existieren. Jeder Rekorder ist mit einer Datei verbunden. Der Dateiname wird als eindeutige Kennung für die Rekorder verwendet. Der erste Aufruf der Rekorder-Task mit einem nicht verwendeten Dateinamen erstellt einen Rekorder (mit den bereitgestellten Parametern) und fügen Sie es den Listenern des Builds hinzu. Alle nachfolgenden Aufrufe an die Rekorder-Task mit diesem Dateinamen ändern den Rekorderstatus (Aufzeichnung oder nicht) oder andere Eigenschaften (wie Protokollierungsebene).

Es sieht aus wie Ihre Bedürfnisse erfüllt.

<compile > 
     <record name="log.txt" action="start"/> 
     <javac ... 
     <record name="log.txt" action="stop"/> 
    <compile/> 
1

Wenn das Programm in einen Dateideskriptor schreibt (z. B. Standard out), können Sie es nur an eine Stelle umleiten (also entweder an die Konsole oder an die Datei, nicht an beide).

Um mehrere Umleitung zu erreichen, haben Sie zwei Möglichkeiten:

  • dass Dateideskriptors duplizieren eine externe Einrichtung (zB der T-Shirt-Befehl ist genau das - auch für Windows gibt es Implementierungen: siehe here und here.
  • schreiben die gleichen Informationen auf zwei verschiedene Ausgänge aus dem Java-Programm (zB sowohl an die Standardausgabe und Standardfehler), dann können Sie umleiten ein traditionelles Mittel verwenden, geht der andere
zu trösten

Ich würde den zweiten Ansatz nicht empfehlen, da er Ihren Code unordentlich macht und Sie oft nicht die volle Kontrolle darüber haben, was geschrieben wird, um einen Standardfehler zu sagen (denken Sie an Aufrufe von Drittanbieterfunktionen).

Verwandte Themen