用Ant构建脚本(4)
五、Ant相关1、标识过滤器一个项目有一套标识,如果发现当一个文件被拷贝时,或许能自动进行扩充。当在这个支持任务中选择了过滤器-拷贝行为,才支持这种方式。在buildfile中,通过过滤器任务或许能设置它。因为这能导致很大的潜在危害,在<filter>任务中标识的标识名在文件中必须以@token@的形式给出。这个标识语法匹配其它建立的系统的语法,该系统完成过滤并保留足够地程序和脚本语言的相交部分,如同文献系统。※※注意:如果在一个文件中出现了带有@token@的标识,但却又没有任何过滤器与其相联系,这将不发生改变。因此,没有避免的方法可以用,但是只要你选择了合适的标识名,这不会产生任何问题。警告:如果你拷贝二进制文件用过滤器来打开,你会被中断。因为这个特征只适用于文本文件。
2、象路径一样的结构你可以指定PATH-和CLASSPATH-type引用,通过用“:”和“;”作为分隔符。Ant会为当前操作系统转换分隔符为正确的字符。无论什么情况下,象路径一样的值是需要指定的,元素嵌套也可以用。下面这个是通常的结构:<classpath> <pathelement path="%{classpath}"/> <pathelement location="lib/helper.jar"/></classpath>属性的位置指定了一个单个的文件或羡慕基本目录的相关目录,路径属性可用带冒号或分号分隔开的位置列表。它需要预先指定,换句话说,带位置属性的多个元素都应该被指定。另外,通过嵌套的<dirset>、<fileset>和<filelist>元素,能指定DirSet、FileSet和FileList。<classpath> <pathelement path="${classpath}"/> <fileset dir="lib"> <include name="**/*.jar"/> </fileset> <pathelement location="classes"/> <dirset dir="${build.dir}"> <include name="apps/**/classes"/> <exclude name="apps/**/*Test*"/> </dirset> <filelist refid="third-party_jars"></classpath>如果你想为几个任务使用同样的路径结构,你可以在同一级的target中用<path>元素来定义它,然后通过id属性来引用它。例如:<path id="base.path"> <pathelement path="${classpath"/> <fileset dir="lib"> <include name="**/*.jar"/> </fileset> <pathelement location="classes"/></path><path id="tests.path"> <path refid="base.path"/> <pathelement location="testclasses"/></path>
3、命令行参数有几个带参数的任务可以在命令行中得到处理。指定包含空格符的参数使它变得更容易,嵌套的arg元素也能使用。value,一个单个的命令行参数,能包含空格;file,作为命令行参数的文件名,执行时以文件的绝对名来代替;path,作为象路径的字符串来处理,作为单个的命令行参数,可以使用“;”或“:”来作为分隔符,Ant会把它转换为本地平台的习惯。line,命令行参数的空格定界线列表。如果可能,尽量避免使用命令行方式。
4、参考buildfile元素的id属性能用来引用它们自己。这有助于到处复制一个XML小片断,例如:<project...> <target...> <rmic...> <classpath> <pathelement location="lib/"/> <pathelement path="${java.class.path}/"/> <pathelement path="${additional.path}"/> </classpath> </rmic> </target> <target...> <javac...> <classpath> <pathelement location="lib/"/> <pathelement path="${java.class.path}/"/> <pathelement path="${additional.path}"/> </classpath> </javac> </target></project>可以写成如下:<project...> <path id="project.class.path"> <pathelement location="lib/"/> <pathelement path="${java.class.path}/"/> <pathelement path="${additional.path}"/> </path> <target...> <rmic...> <classpath refid="project.class.path"/> </rmic> </target> <target...> <javac...> <classpath refid="project.class.path"/> </javac> </target></project>