Ant替换属性文件中的分隔标记

时间:2016-09-05 12:47:54

标签: ant properties

我有属性

environment.dir=c:\templocation
environmentconfig.dir=c:\templocation\\config
finalLocation.dir=c:\finalLocation

这些脚本由一组ant脚本生成到属性文件中,属性文件值由系统自动分隔。我无法更改这些脚本。所以 propFileToChange.properties =

environment.dir=c:\\templocation
environmentconfig.dir=c:\\templocation\\config
finalLocation.dir=c:\\finalLocation

我想将生成文件中的environment.dir值替换为另一个属性的文件中的所有属性。但是,我无法解决如何处理分隔文本。 我想要的结果:

environment.dir=c:\\finalLocation
environmentconfig.dir=c:\\finalLocation\\config

我试过了:

<replace file="propFileToChange.properties" token="${environment.dir}" value="c:\\finalLocation" />

我试过了:

<propertyfile file="temp.properties">
    <entry key="${environment.dir}" value="c:\\finallocation"
</propertyfile>
<replace file="propFileToChange.properties" replacefilterfile="temp.properties" summary="true" />

由于属性文件的内容被分隔,似乎找不到令牌。那么有什么方法可以在寻找之前划分令牌吗?

1 个答案:

答案 0 :(得分:0)

替换任务旨在替换源文件中的标记。令牌通常以@开头和结尾,标记要替换的文本。

例如:

environment.dir=@environment.dir@
environmentconfig.dir=@environmentconfig.dir@
finalLocation.dir=@finalLocation.dir@

在您的情况下,源文件没有可识别的令牌,但我们可以按如下方式制作它们:

<copy file="propFileToChange.properties" tofile="build.properties" overwrite="true">
  <filterset begintoken="c:\\" endtoken="location">
    <filter token="temp" value="c:\\finalLocation"/>
  </filterset>
</copy>

这里我指定令牌“temp”以字符串“c:\”开头,以“location”结尾。这意味着它将执行以下所需的替换。

实施例

├── build.properties
├── build.xml
└── propFileToChange.properties

的build.xml

<project name="demo" default="replace">

  <target name="replace">
    <copy file="propFileToChange.properties" tofile="build.properties" overwrite="true">
      <filterset begintoken="c:\\" endtoken="location">
        <filter token="temp" value="c:\\finalLocation"/>
      </filterset>
    </copy>
  </target>

</project>

propFileToChange.properties

environment.dir=c:\\templocation
environmentconfig.dir=c:\\templocation\\config
finalLocation.dir=c:\\finalLocation

build.properties

environment.dir=c:\\finalLocation
environmentconfig.dir=c:\\finalLocation\\config
finalLocation.dir=c:\\finalLocation