2011-01-21 11 views
2

要件:
DEVとRELEASEモードの両方に使用される1つのANTビルドファイルがあります。 DEVモードでフィルタリングを有効にし、RELEASEモードで無効にしたいと考えています。両方のモード(DEVとRELEASE)で同じビルドファイルを使用しているので、ビルドモードに基づいてフィルタリングをオン/オフに切り替える方法を探しています。ANT 'copy'タスクのネストされた<filterset>要素を含むフィルタリングを無効にする

これまでの分析:
ドキュメントごとにフィルタリングを無効にできますが、この属性がfalseの場合でもネストされた要素が常に使用されます。 http://ant.apache.org/manual/Tasks/copy.html
私たちの場合、要素から離れることはできません。

質問:
'コピー'タスクでネストされた要素を含むフィルタリングを無効にする回避策があるかどうかを知りたいと思います。

答えて

3

フィルタセットを持たないという効果は、何もしないことによって実現できます。 Filtersets support id/refidsのように、2つのdevと1つのリリースを定義し、モードに基づいた条件を使用してそれらの間を切り替えることができます。このような何か:

<property name="mode" value="release" /><!--Or value="dev"--> 

<filterset id="dev.filter.id"> 
    <filter token="MODE" value="dev" /> 
</filterset> 

<filterset id="release.filter.id" /><!--Null filterset--> 

<!--Choose filterset id depending on mode--> 
<condition property="copy.filter.id" 
      value="dev.filter.id" 
      else="release.filter.id"> 
    <equals arg1="${mode}" arg2="dev"/> 
</condition> 

<copy file="input.txt" tofile="output.txt"> 
    <filterset refid="${copy.filter.id}" /> 
</copy> 

あなたはdevの間で異なるとモードを解除する行動の数を持っている場合、それは別のビルド構成ファイルのものを入れて、現在のモードのためのちょうど1をロードしても意味があります。

+0

ありがとうございます。条件付きの発生が1つしかない場合は、提案したアプローチが有効です。私の要求にもっと明確にするために、のトークンと値がにあるの複数の出現があり、ビルドファイルのいくつかの場所でを有効または無効にする必要があります。上記の問題に対する解決策を提案してください。 –