1

<copy>オプションで正規表現に基づいてファイルの名前を変更できるタスクを使用して、一般的な Ant ビルド スクリプトを作成したいと考えています。ネストされた<regexpmapper>は、プロジェクト固有のプロパティ ファイルが存在する場合、そこから名前変更パターンを読み込みます。

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

4

1 に答える 1

2

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

プロジェクト プロパティ ファイルproj_props.txtには以下が含まれます。

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

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

ビルドファイル:

<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>

2 つのインスタンスを定義しfiltermapperます。1 つはプロジェクト プロパティ ファイルのプロパティに基づいて正規表現の置換を実行し、もう 1 つは何もしません。どちらが選択されるかは、use.filterプロパティによって決まります。プロジェクト プロパティ ファイルが存在しない場合use.filterは設定されないため、「何もしない」ID フィルターマッパーが使用されます。

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

于 2011-01-29T14:29:42.157 に答える