资料移动或者复制的时候完成文件中的文本替换。实现antx功能

文件移动或者复制的时候完成文件中的文本替换。实现antx功能
filterset DataType
ant1.4支持。定义一组过滤器。这些过滤器由filter任务实现。将在文件移动或者复制的时候完成文件中的文本替换。
由filterset元素表示。可以作为copy或者move任务中的内容出现或者作为目标级构建文件出现(作为project元素的子元素出现)
属性
beginoken,对于嵌套过滤器所搜索的记号。这是标识其开始的字符串。默认@
endtoken,对于嵌套过滤器所搜索的记号。这是标识其结束的字符串。默认@
id,此过滤器的唯一标识符。
refid,对构建文件中某处定义的一个过滤器的引用。

filterset还可以包含以下子元素
0-N个filter
token必须,指定要替换的记号,不包括定界符。如果此过滤器要替换@VERSION@,则将VERSION作为此属性值。

value必须,指定遇到记号时的替换文本。

0-N个<filtersfile>
每个元素指定一个java特性文件,由此可加载另外的过滤器。此文件格式是每一行一个记号,其后面为一个冒号(;)或者等于号(=)。再后面是一个值。
属性
<!-- 使用外部的过滤定义文件 -->
<copy toDir="${dist.dir}/docs">
  <fileset dir="${build.dir}/docs">
    <include name="**/*.html">
  </fileset>
  <filterset begintoken="%" endtoken="*">
    <filtersfile file="${user.dir}/dist.properties"/>
  </filterset>
</copy>


file必须,包含过滤器的特性文件的文件名。


<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="build/*.*" unless="includetests" />
</patternset>

<target name="run">
<echo message="开始" />
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${starttime}" />

<copy todir="build" filtering="true">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>

<filterset begintoken="%" endtoken="!">
<filter token="BUILD_DATE" value="${starttime}" />
<filter token="COPYRIGHT" value="李义星" />
</filterset>
</copy>

<echo message="结束" />
<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${endtime}" />
</target>
</project>
<!--
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />

<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="**/*t.txt" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
-->
<!--
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<property environment="env" />
<property name="JAVA_HOME" value="${env.JAVA_HOME}" />

<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>

<target name="clean">
<delete file="${result}" />
</target>

<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>

<exec executable="test.bat">
<env key="JAVA_HOME" value="${JAVA_HOME}" />
</exec>

<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
-->
<!--
<target name="prepare">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
</target>

<target name="clean" description="删除build目录">
<delete dir="${build.dir}" />
</target>

<target name="compile" description="编译" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>

<target name="jar" description="打包" depends="prepare">
<echo message="${debug.flag}" />
</target>

<target name="all" description="所有操作,执行顺序是:clean, compile, jar" depends="clean, compile, jar">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>-->

1.txt
%BUILD_DATE!
%COPYRIGHT!

拷贝后
2011-05-14 08:51:32
李义星
上面的copy任务的filtering设置为true,以确保filter开启。


<!--配置文件properties的antx功能-->
<copy todir="${build.classes}/com/superschool/resource/spring/properties/jdbc">
<fileset dir="config">
<include name="jdbc.properties" />
</fileset>

<!--定义拷贝替换过滤器-->
<filterset begintoken="${" endtoken="}">
<filtersfile file="${user.home}/${projectName}/antx.properties" />
</filterset>
</copy>

这里会报错:
BUILD FAILED
E:\java\superschool\build.xml:82: Syntax error in property: ${
因为在
<filterset begintoken="${" endtoken="}">
这里的${会被ant解析成了特性。
解决方案是
<!--在前面定义了一个前缀属性->>
<property name="begintoken" value="$" />

<!--配置文件properties的antx功能-->
<copy todir="${build.classes}/com/superschool/resource/spring/properties/jdbc">
<fileset dir="config">
<include name="jdbc.properties" />
</fileset>

<!--定义拷贝替换过滤器,这里使用前缀属性读取-->
<filterset begintoken="${begintoken}{" endtoken="}">
<filtersfile file="${user.home}/${projectName}/antx.properties" />
</filterset>
</copy>