我有一个大项目,它的构建自动化由 ant 完成。我需要一些想法或解决方案来更改所有文件中的一些公共变量。
例如,公司名称、产品名称或年份包含在许多文件中:帮助文件(html)、许可证和配置文件(txt、xml)、源代码(java->class)等。有没有简单的方法来设置这些的变量并让所有文件快速更改?也欢迎使用不同的工具。
总是可以选择添加一些代码来打开文件,找到位置并更改字符串,但这似乎不是一个优雅的解决方案。
谢谢你。
我有一个大项目,它的构建自动化由 ant 完成。我需要一些想法或解决方案来更改所有文件中的一些公共变量。
例如,公司名称、产品名称或年份包含在许多文件中:帮助文件(html)、许可证和配置文件(txt、xml)、源代码(java->class)等。有没有简单的方法来设置这些的变量并让所有文件快速更改?也欢迎使用不同的工具。
总是可以选择添加一些代码来打开文件,找到位置并更改字符串,但这似乎不是一个优雅的解决方案。
谢谢你。
ant Copy和Move任务都支持filterset元素。使用它,您可以将标记的全局替换应用于文件集中的文件。
简单的例子:
<target name="test">
<mkdir dir="build"/>
<copy todir="build">
<fileset dir="src">
<include name="*.txt"/>
</fileset>
<filterset>
<filter token="COMPANY_NAME" value="Acme Inc."/>
</filterset>
</copy>
</target>
输出:
$ cat src/foo.txt
I work for @COMPANY_NAME@.
$
$ cat build/foo.txt
I work for Acme Inc..
我喜欢以下 ANT 解决方案:
使用replaceregexp任务查找并修复缺少许可证标头的 Java 文件:
<target name="replace_headers">
<loadfile property="javaheader" srcFile="lib/standardheader.txt"/>
<replaceregexp match="(/\*.*\*/.*)??^package " flags="sm"
replace="${javaheader}${line.separator}package ">
<fileset dir="src">
<include name="**/*.java"/>
</fileset>
</replaceregexp>
</target>
简单且不需要 Java 源代码中的替换标记。