读取属性文件并通过Ant脚本替换模板文件中的值

时间:2015-03-30 18:12:08

标签: windows ant

我有两个文件local.properties.template,另一个是test.properties文件。

local.properties.tamplate看起来像

dir.source=@deploy.dir@/data/source
dir.storage=@deploy.dir@/data/storage
dir.reports=@deploy.dir@/data/reports
dir.scripts=@deploy.dir@/data/scripts
dir.dictionary=@deploy.dir@/data/dictionary
moveit.dir=@moveit.dir@

moveit.enabled=@moveit.enabled@
moveit.host=@moveit.host@
moveit.path=@moveit.path@
moveit.user=@moveit.user@
moveit.pass=@moveit.pass@
moveit.root=@moveit.root@
moveit.url=@moveit.url@

和test.properties看起来像

moveit.dir=D:\\data\\moveit
moveit.enabled=false
moveit.host=thmdsdev0.tsh.tho.com
moveit.path=/moveitdmz
moveit.user=muttt
moveit.pass=ssss
moveit.root=/Home/MeaningfulUse
moveit.url=https://thmdsdev00.tsh.tho.com/moveitdmz

我想通过ant来读取test.properties中的值,例如moveit.user并将其粘贴或添加到local.properties.template中代替@ moveit.user @并对所有变量都相同。然后我将更改local.properties.template文件的名称为local.properties并将其移动到其他文件夹

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以使用Filter ChainReplace Tokens来达到这个效果。例如:

<copy file="${PROP.your.path}/local.properties.template"
    tofile="${PROP.your.path.destination}/local.properties"
    overwrite="true">
    <filterchain>
        <replacetokens>
            <token key="@moveit.dir@" value="${moveit.dir}"/>
            <token key="@moveit.dir2@" value="${moveit.dir2}"/>
        </replacetokens>
    </filterchain>
</copy>

答案 1 :(得分:0)

我以下面的方式创建了蚂蚁脚本,它运行正常。

<project name="replace_and_copy" basedir="." default="usage">
    <!--taskdef resource="net/sf/antcontrib/antcontrib.properties"/-->
    <taskdef resource="net/sf/antcontrib/antlib.xml"/>

    <macrodef name="copy-and-filter">
    <sequential>
      <copy tofile="local_for_test_copy.properties" file="templates/local.properties.test.template" overwrite="true">
        <filterset recurse="true">
          <filtersfile file="Properties/${deploy.env}/local_for_${deploy.env}.properties"/>
        </filterset>
      </copy>
    </sequential>
  </macrodef>

 <target name="env.copy.local.props">
  <copy-and-filter />
    <for param="host" list="${deploy.host}">
      <sequential>
        <copy todir="\\@{host}\${deploy.path}\conf\"
              file="local_for_test_copy.properties"
              overwrite="true"/>
      </sequential>
    </for>
  </target>
</project>