2012-04-12 14 views
6

私はantを使ってJavaプログラムを起動しています。Ant Javaのタスク:コンソールとファイルに出力を出力する方法 - シェルのリダイレクトなしでビルド出力を記録する

私は、プログラムが終了した後、出力を「緩く」したくありません。だから私はプロパティ 'output'を使用して出力をファイルに保存します。

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

残念ながら私はもうコンソール出力がありません。コンソール上に出力を持つ良い方法は、のtxtファイルです。私は望んでないんので

私は "user" シェルリダイレクトを使用する必要があることを、

ant mytast > myFile.txt 

にalternativeためlooking am "> .."。 。リダイレクトを選択しない場合、出力は失われます。

+0

'tee'コマンドを使用できます。これを見て[ページ](http://en.wikipedia。org/wiki/Tee_%28コマンド%29)。 – dash1e

+0

これは外部OSコマンドに依存します。それほど移植性がありません。 –

答えて

7

Antに出力を記録する方法があります。 http://ant.apache.org/manual/Tasks/recorder.html

レコーダーは、 の出力をファイルに記録する現在のビルドプロセスのリスナーです。

複数のレコーダーが同時に存在することがあります。各レコーダーは、ファイルに関連付けられた です。ファイル名は、レコーダー用のユニークな識別子 として使用されます。 ファイル名を使用しないレコーダータスクへの最初の呼び出しは、(提供されたパラメーターを使用して)レコーダーを作成し、 をビルドのリスナーに追加します。このファイル名を使用して レコーダータスクを呼び出すと、そのレコーダー状態は (記録中かどうか)またはその他のプロパティ(ログレベルなど)に変更されます。

あなたの必要性を満たすようです。

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

プログラムが1つのファイル記述子(標準出力など)に書き込む場合は、1つの場所にのみリダイレクトすることができます(どちらのコンソールまたはファイルでも、どちらでもないため)。

は、複数のリダイレクトを実現するには、次の2つのオプションがあります。

  • は、外部手段を使用して、そのファイルディスクリプタを複製する(例えばteeコマンドは、まさにそれはない - でも、Windows用の実装があります:herehereを参照してください。
  • (例えば、両方の標準出力と標準エラー出力に)、その後、あなたが他のコンソールに行き、1は、従来の手段を使用してリダイレクトすることができますJavaプログラムの中から二つの異なる出力に同じ情報を書き込む

コードが乱雑になり、標準エラー(サードパーティ関数への呼び出しを考える)に書かれていることを完全に制御できないため、2番目のアプローチはお勧めしません。

関連する問題