我有属性
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" />
由于属性文件的内容被分隔,似乎找不到令牌。那么有什么方法可以在寻找之前划分令牌吗?
答案 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
<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>
environment.dir=c:\\templocation
environmentconfig.dir=c:\\templocation\\config
finalLocation.dir=c:\\finalLocation
environment.dir=c:\\finalLocation
environmentconfig.dir=c:\\finalLocation\\config
finalLocation.dir=c:\\finalLocation