根据不同文件的内容在ApacheAnt中命名文件
我有foo.js和一个生成foo.min.js的ant构建过程 foo.js的标题注释包括:根据不同文件的内容在ApacheAnt中命名文件,ant,build-process,Ant,Build Process,我有foo.js和一个生成foo.min.js的ant构建过程 foo.js的标题注释包括: * $Id: foo.js 12345 2011-10-04 14:35:23Z itoltz $ 其中12345是提交给SVN时文件的修订版 我想将foo.min.js复制到foo.min.12345.js您可以使用loadfile和regex将修订号提取到属性中。然后可以使用属性复制文件 <project default="rename"> <target name="re
* $Id: foo.js 12345 2011-10-04 14:35:23Z itoltz $
其中12345是提交给SVN时文件的修订版
我想将foo.min.js复制到foo.min.12345.js您可以使用loadfile和regex将修订号提取到属性中。然后可以使用属性复制文件
<project default="rename">
<target name="rename" depends="get-rev">
<copy file="foo.min.js" toFile="foo.min.${revision.number}.js"/>
</target>
<target name="get-rev">
<loadfile srcFile="foo.js" property="revision.number">
<filterchain>
<linecontainsregexp>
<regexp pattern="\* \$Id: foo.js"/>
</linecontainsregexp>
<tokenfilter>
<replaceregex pattern="\* \$Id: foo.js (\d+).*" replace="\1"/>
</tokenfilter>
<striplinebreaks/>
</filterchain>
</loadfile>
<echo message="revision.number: ${revision.number}"/>
</target>
</project>
事实上,有一个小问题我想不出来。它以某种方式占领了一个空间!例如,文件名为“foo.min.12345.js”。我将echo修改为,输出为:[echo]revision.number:-15354-。有什么想法吗?我甚至看不出它是如何捕获空间的,因为它是专门捕获\d+…我通过添加到过滤器链的末端来修复它,但我仍然好奇是否有人知道为什么会发生这种情况。
$ ls
build.xml foo.js foo.min.js
$
$ ant
Buildfile: C:\tmp\build.xml
get-rev:
[echo] revision.number: 12345
rename:
[copy] Copying 1 file to C:\tmp
BUILD SUCCESSFUL
Total time: 0 seconds
$
$ ls
build.xml foo.js foo.min.12345.js foo.min.js