Ant Regexp Mapper: Lesenmuster aus einer Datei?
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?
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.