2012-03-08 16 views
2

出力をプロパティまたはstdoutストリームに条件付きでリダイレクトする方法はありますか?ant execタスクの出力を条件付きでリダイレクトする

<macrodef name="mytask"> 
    <attribute name="output" default="STDOUT"/> 
    <sequential> 
     <exec executable="my.exe" outputproperty="@{output}"/> 
    </sequential> 
</macrodef> 

上記の例では、出力はデフォルトでプロパティSTDOUTにリダイレクトされています。代わりに、私はそれがstdoutストリームに指示されたいと思います。

上記のマクロのコピーとしてmytask_with_stdoutを作成し、execの出力プロパティを削除できますが、これはDRYの原則に違反します。

これを行うには良い方法がありますか?

答えて

2

あなたが望むものを得るために組み合わせることができるAnt機能は2つあります。

最初に<macrodef>には、<element>のいずれかを渡すことができます。

第2に、<redirector>を使用して、プロパティ内の<exec>コマンドの出力をキャプチャできます。

Windowsマシンで次のAntスクリプトを実行したので、cmd.exeのechoコマンドを使用できます。 cmd.exeをmy.exeに置き換えてください。

<project name="exec-redirector-example" default="run"> 
    <macrodef name="mytask"> 
     <attribute name="message"/> 
     <element name="myredirector" optional="true"/> 
     <sequential> 
      <exec executable="cmd.exe"> 
       <arg value="/c"/> 
       <arg value="echo"/> 
       <arg value="@{message}"/> 
       <myredirector/> 
      </exec> 
     </sequential> 
    </macrodef> 

    <target name="run"> 
     <!-- exec outputs to STDOUT by default --> 
     <mytask message="To STDOUT"> 
     </mytask> 

     <!-- exec outputs to a property in this example --> 
     <mytask message="To property"> 
      <myredirector> 
       <redirector outputproperty="my.property"/> 
      </myredirector> 
     </mytask> 

     <echo>${my.property}</echo> 
    </target> 
</project> 
+0

これは有望です。すぐにそれをテストします:Dありがとう! – Magnus

+0

テスト済みです。 –

関連する問題