ANT使用具有属性的文件替换指定文件中的字符串
我在dev.properties文件中有一个属性,它们如下所示:ANT使用具有属性的文件替换指定文件中的字符串,ant,properties,replace,Ant,Properties,Replace,我在dev.properties文件中有一个属性,它们如下所示: test.url=https://www.example.com/ [...] 在项目文件中有一个标记[[test.url]],我想用它来替换。我只想在dev.properties中定义所有标记并在构建脚本中使用它们,但不需要修改构建脚本,我想在指定的文件(如*.php、*.html等)中替换这些标记 有人能给我一个建议怎么做吗?谢谢。在下面的Ant脚本中,用包含标记化文件的根目录替换src root属性: <projec
test.url=https://www.example.com/
[...]
在项目文件中有一个标记[[test.url]],我想用它来替换。我只想在dev.properties中定义所有标记并在构建脚本中使用它们,但不需要修改构建脚本,我想在指定的文件(如*.php、*.html等)中替换这些标记
有人能给我一个建议怎么做吗?谢谢。在下面的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]],那么这将是一个很好的选择。尝试以下方法:
<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任务。我在文件中的属性存储为:[[My.property]]。我现在做的是:也许有更好的方法。另外,由于注释中的字符数量限制,我无法在此处粘贴代码。这真的很奇怪,限制在很低的数量。请编辑您的问题,并告诉我们您到底在寻找什么。给我们一个尽可能小的例子来说明dev.properties中的内容。给我们举一个可能最小的例子,说明带有标记的*.php文件是什么样子的。将代码板站点上的Ant脚本复制到您的问题中。然后显示替换完成后最终的*.php文件的内容。file dev.properties(或文件名)包含一些必须在源代码文件中替换的属性。dev.properties示例:project.cdn.url=project.cdn.fonts=[…]现在,源代码(不管是html、php还是css;可以是任何文件)可以包含“临时变量”,如示例所示:因此,目标是替换源代码中与指定文件(此处为dev.properties)中编写的属性相匹配的所有“变量”。首先,您应该编辑问题,以明确示例标记类似于[[project.cdn.url]],而不是@test。url@. 是否需要分隔符“[[”和“]]”?我的回答中使用的ReplaceTokens筛选器读取器仅适用于单字符分隔符。“@”是默认值,但“[”和“]”也可以使用。如果无法更改分隔符,请考虑使用将映射属性键的映射。例如,a下的可以将“project.cdn.url”转换为“[[project.cdn.url]]”。问题已经编辑好了。2.分隔符“[]”和“]]”可以替换为“@”。3.让我检查一下你的代码并测试它的工作原理。4.由于字符的限制,我在粘贴代码时遇到了一些问题。此外,我按照StackOverflow的建议使用了4个空格来缩进每一行,但仍然不太好看。我不知道为什么。