【问题标题】:Ant Script Loop through property file and replace values dynamicallyAnt Script 循环遍历属性文件并动态替换值
【发布时间】:2014-01-21 09:55:17
【问题描述】:

我需要遍历一些 XML 文件,替换其中的环境特定值并创建一组新的 XML 文件。环境特定值将从属性文件中获取。我可以遍历一个目录来读取所有文件并使用 xmltask 替换一些特定的值,如下所示。

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

但我想通读一个属性文件并从中获取路径/值。 对于这种情况,我尝试使用属性选择器、属性、变量作为不同的选项,并设法获取路径而不是值。下面是属性文件的 sn-p 和我正在使用的目标。

#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> ${x.@{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> 

如果你们能发光,那将是非常有帮助的。

谢谢, 文卡特

【问题讨论】:

    标签: ant ant-contrib xmltask


    【解决方案1】:

    这样会更好吗?

    我认为您对“x”感到困惑。前缀。

    <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"/>        
              <local name="propertyList"/>
              <propertyselector property="propertyList" delimiter="," select="\1" match="x\.([^\.]*)\.xpath" casesensitive="true" distinct="true"/>      
              <for list="${propertyList}" param="sequence">               
                <sequential>
                    <echo> @{sequence} </echo>  
                    <echo> @{sequence}.xpath = ${x.@{sequence}.xpath} </echo>
                    <echo> @{sequence}.value = ${x.@{sequence}.value} </echo>
                </sequential>               
              </for>          
        </target> 
    </project>
    

    【讨论】:

    • 我将下面的脚本调整为使用 select="\1" (选择第一个匹配项)而不是 select="\0" 选择整个字符串)。
    • 嗨帕特里斯,非常感谢。它的工作完美。你是对的,我对前缀 x 感到困惑,对语法不太确定。在我更改 ant 版本之前,本地属性也无法正常工作。我现在就继续。
    • 太棒了!
    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 2014-12-19
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多