Frage

Ich möchte ein generisches Ant -Build -Skript mit a schreiben <copy> Aufgabe, die optional Dateien basierend auf Regexps umbenennen kann. Ein verschachtelter <regexpmapper> Würde die Umbenennungsmuster von projektspezifischen Eigenschaftendateien geladen werden, wenn sie vorhanden sind.

Hat jemand dies bereits getan oder muss ich einen eigenen Mapper schreiben?

War es hilfreich?

Lösung

Hier ist ein Beispiel dafür, wie Sie dies tun könnten.

Projekteigenschaften Datei proj_props.txt Enthält:

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

(Beachten Sie die Flucht \ in der TO -Saite.)

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>

Sie definieren ein paar von filtermapper Eine Instanzen, die einen Regexp -Ersatz basierend auf den Eigenschaften der Projekteigenschaftendatei ersetzt, die andere, die nichts tut. Das use.filter Eigenschaft entscheidet, welche gewählt wird. Wenn die Datei Projekteigenschaften nicht vorhanden ist use.filter würde nicht festgelegt, daher wird der Identitätsfilterapper "do-nichts" verwendet.

Beachten Sie, dass dies nur funktioniert, wenn verschachtelte Ressourcen in der verwendet werden copy Aufgabe. Wenn Sie nur eine Datei zum Kopieren haben und verwenden <copy file="...", Der Filteraper wird ignoriert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top