У меня возникло требование перебрать некоторые XML-файлы, заменить в нем значения среды и создать новый набор XML-файлов. Конкретные значения среды должны быть взяты из файла свойств. Я могу пройти через каталог, чтобы прочитать все файлы и заменить определенное значение с помощью xmltask, как показано ниже.Ant Script Loop через файл свойств и динамически меняет значения
<target name="updateConfig" description="update the configuration" depends="init">
<xmltask todir="${ConfigDestDirectory}" report="false" failwithoutmatch="true">
<fileset dir="${ConfigSourceDirectory}">
<include name="*.xml"/>
</fileset>
<replace path="/:application/:NVPairs/:NameValuePair[:name='Connections/HTTP/HostName']/:value/text()" withXml="localhost"/>
</xmltask>
<echo>Replaced Successfully</echo>
</target>
Но я хотел бы прочитать файл свойств и получить от него путь/значение. Я попытался использовать свойство selector, property, var как различные параметры для этого случая и получить путь, но не значение. Ниже приведен фрагмент файла свойств и целевого объекта, который я использую.
#DEV.properties
HostName.xpath=/:application/:NVPairs/:NameValuePair[:name='Connections/HTTP/HostName']/:value/text()
HostName.value=localhost
<project name="TestBuild" default="ReadPropertyFile" basedir=".">
<target name="init">
<property file="DEV.properties"/>
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpath="${xmltaskPath}"/>
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${antcontribPath}"/>
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
</target>
<target name="ReadPropertyFile" description="update the configuration" depends="init">
<property file="DEV.properties" prefix="x"/>
<propertyselector property="propertyList" delimiter="," select="\0" match="([^\.]*)\.xpath" casesensitive="true" distinct="true"/>
<for list="${propertyList}" param="sequence">
<sequential>
<propertyregex property="destproperty" input="@{sequence}" regexp="([^\.]*)\." select="\1" />
<property name="tempname" value="${destproperty}.value" />
<var name="localprop" value="${tempname}"/>
<echo> @{sequence} </echo>
<echo> ${[email protected]{sequence}} </echo>
<echo>destproperty --> ${destproperty}</echo>
<echo>tempname --> ${tempname}</echo>
<echo> localprop --> ${localprop}</echo>
<echo>${x.${localprop}} </echo> <!--This is not working -->
</sequential>
</for>
</target>
Было бы очень полезно, если вы, ребята, можете пролить свет.
Спасибо, Venkat
Я скорректировал сценарий ниже, чтобы использовать select = "\ 1" (выберите первое совпадение) вместо select = "\ 0" выберите всю строку). –
Привет, Патрис, спасибо тонну. Его работа прекрасна. Вы правы, я запутался в префиксе x и не очень уверен в синтаксисе. Также местная собственность не работала, пока я не изменил версию муравья. Я продолжу это сейчас. – user3218526
Отлично!