2011-01-28 13 views
1

<copy>タスクを持つ一般的なAntビルドスクリプトを書いて、正規表現に基づいてファイルの名前を変更することもできます。ネストされた<regexpmapper>は、プロジェクト固有のプロパティファイル(存在する場合)からリネームパターンをロードします。Ant regexp mapper:ファイルからパターンを読み込む?

すでに誰かがこれを行っているのですか、それとも自分でマッパーを作成する必要がありますか?

答えて

1

これを行う方法の例を次に示します。

プロジェクトのプロパティはproj_props.txtファイル含まれています

use.filter=regexp.mapper 
from.regexp=(.*)_test(.*) 
to.regexp=\\1\\2 

(エスケープ文字列にで\に注意してください。)

ビルドファイル:

<property file="proj_props.txt" /> 

<!-- filter for regexp -->  
<filtermapper id="regexp.mapper"> 
    <tokenfilter> 
     <replaceregex pattern="${from.regexp}" 
         replace="${to.regexp}" /> 
    </tokenfilter> 
</filtermapper> 

<!-- identity filter, used when no regexp needed --> 
<filtermapper id="identity.mapper" /> 

<!-- decide which filter to use --> 
<condition property="chosen.mapper" 
      value="regexp.mapper" else="identity.mapper"> 
    <isset property="use.filter" /> 
</condition> 

<copy todir="..."> 
    <fileset> 
     ... 
    </fileset> 
    <filtermapper refid="${chosen.mapper}" /> 
</copy> 

あなたはfiltermapperインスタンス、1のカップルを定義しますプロジェクトプロパティファイルのプロパティに基づいて正規表現を置き換えるもの、他のものはnoもの。 use.filterプロパティは、どちらが選択されるかを決定します。プロジェクトプロパティファイルが存在しない場合、use.filterは設定されません。したがって、「何もしない」アイデンティティfiltermapperが使用されます。

これは、copyタスクでネストされたリソースを使用する場合にのみ機能することに注意してください。コピーするファイルが1つしかなく、<copy file="..."を使用している場合、filtermapperは無視されます。

関連する問題