我在文件 dev.properties 中有一个属性,它们看起来像这样:
test.url=https://www.example.com/
[...]
在项目文件中有一个令牌 [[test.url]] 我想用https://www.example.com/替换它。我只想在 dev.properties 中定义所有标记并在构建脚本中使用它们,但不修改构建脚本,我想替换指定文件中的这些标记,如 *.php、*.html 等。
有人可以给我一个建议吗?谢谢。
我在文件 dev.properties 中有一个属性,它们看起来像这样:
test.url=https://www.example.com/
[...]
在项目文件中有一个令牌 [[test.url]] 我想用https://www.example.com/替换它。我只想在 dev.properties 中定义所有标记并在构建脚本中使用它们,但不修改构建脚本,我想替换指定文件中的这些标记,如 *.php、*.html 等。
有人可以给我一个建议吗?谢谢。
尝试这个:
<copy file="input.txt" tofile="output.txt">
<filterchain>
<replaceregex pattern="\$\{" replace="{" />
<filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
<param type="propertiesfile" value="properties.txt"/>
<param type="tokenchar" name="begintoken" value="{"/>
<param type="tokenchar" name="endtoken" value="}"/>
</filterreader>
</filterchain>
</copy>
在以下 Ant 脚本中,将src-root
属性替换为包含标记化文件的根目录:
<project name="ant-replace-tokens-with-copy-task" default="run">
<target name="run">
<!-- The <copy> task cannot "self-copy" files. So, for each -->
<!-- matched file we'll have <copy> read the file, replace the -->
<!-- tokens, and write the result to a temporary file. Then, we'll -->
<!-- use the <move> task to replace the original files with the -->
<!-- modified files. -->
<property name="src-root" location="src"/>
<property name="filtered-file.extension" value="*.filtered-file"/>
<copy todir="${src-root}">
<fileset dir="${src-root}">
<include name="**/*.html"/>
<include name="**/*.php"/>
</fileset>
<globmapper from="*" to="${filtered-file.extension}"/>
<filterchain>
<filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
<param type="propertiesfile" value="dev.properties"/>
</filterreader>
</filterchain>
</copy>
<move todir="${src-root}">
<fileset dir="${src-root}" includes="**"/>
<globmapper from="${filtered-file.extension}" to="*"/>
</move>
</target>
</project>
您指定您不想编辑构建脚本,因此此答案不符合条件,但仍可能对其他读者有用。
如果您愿意编辑您的目标文件以使用格式 ${test.url} 而不是 [[test.url]] 那么ExpandProperites将是一个很好的选择。