質問

ジェネリックアントビルドスクリプトを書きたい <copy> regexpsに基づいてファイルをオプションに変更できるタスク。ネスト <regexpmapper> 存在する場合、プロジェクト固有のプロパティファイルから名前変更パターンをロードします。

誰かがすでにこれをやったことがありますか、それとも自分のマッパーを書く必要がありますか?

役に立ちましたか?

解決

これがどのようにこれを行うかの例です。

プロジェクトプロパティファイル proj_props.txt 含まれる:

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

(エスケープに注意してください \ to stringで。)

buildfile:

<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 インスタンスは、プロジェクトプロパティファイルからのプロパティに基づいてregexp交換を実行するインスタンス、もう1つは何もしないことです。 use.filter プロパティは、選択されることを決定します。プロジェクトプロパティファイルが存在しない場合 use.filter 設定されないため、「無視」のID Filtermapperが使用されます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top