dataType—ant入门指南(6)

来源:互联网 发布:优易数据交易平台 编辑:程序博客网 时间:2024/04/29 23:11

dataType—ant入门指南(6)


这是ant理论部分的最后一章,也是非常重要的一章,明河将介绍ant中常用的几种dataType的用法。
dataType可以理解为复杂数据集合,比如特定规则的文件列表集合。


ant的所有dataType标签


  • fileset:定义一个文件集合列表,这些文件必须确实存在
  • filelist:定义一个文件集合列表,这些文件无需确实存在
  • path:以某种在不同操作系统间可移植的方式指定路径
  • patternset:将一组模式分组在一起
  • argument:对于由一个ant构建文件调用的程序,向其传递命令行参数(标签名是arg)
  • filterlist:将一组过滤器分组在一起
  • mapper:定义一组输入文件和一组输出文件间的复杂关系
  • environment:于由一个ant构建文件调用的程序,向其传递环境变量

必须掌握的是:filesetfilelistpathargumentpatternset

  • 点此下载 


fileset

fileset和filelist(下面会讲到),功能上非常相近,都是用于获取一组文件列表,二者的不同之处在于fileset内的文件必须存在,filelist则没这要求;fileset的属性也比filelist更为的丰富,所以功能上更为的强大,一般使用fileset来获取文件。

属性

说明

dir

fileset的基目录

dir

fileset的基目录

casesensitive

如果为false,那么匹配文件名时不区分大小写,默认为true

defaultexcludes

是否使用默认的排除模式,默认为true。默认的排除模式会把一些版本控制的文件夹或文件排除

excludes

排除指定的文件列表(用逗号隔开)

excludesfile

排除指定的文件

includes

需要包含的文件列表(用逗号隔开)

includesfile

包含指定的文件

接下来来看几个demo,假设demo目录如图所示:

任务1:合并uploader目录下的所有文件

<dirname property="current.dir" file="${ant.file.uploader}"/>    <property name="uploader.dir" location="${current.dir}/uploader" />    <target name="build-all">        <echo>dir:${current.dir}</echo>        <concat destfile="uploader.js" encoding="utf8" outputencoding="utf8">            <fileset dir="${uploader.dir}" includes="**/*.js" />        </concat>    </target>


concat(合并)这个任务标签,明河之前有讲过了,与之前写的demo不同的是,concat内增加了fileset。由于我们的需求是合并uploader目录下的所有js,所以uploader下文件不少,明显不可能单独一个个写path,这时候就需要用到fileset,获取文件列表集合。

fileset会获取${uploader.dir}(该属性引用指向uploader目录)下所有的js,通过includes=”**/*.js”包含所有js。
也许你会对**/*感到疑惑,明河下面做个说明。

包含和排除模式语法:
  • *:匹配0或多个字符,比如*.js匹配minghe.js、taobao.js但不匹配minghe.css
  • ?:匹配1个字符,比如mingh?.js,匹配minghe.js、minghg.js,但不匹配minghe36.js
  • **:匹配0或多个目录,比如/minghe/**,匹配/minghe/下的任意目录,**/*.js匹配任意目录下的所有js文件
使用patternset标签

除了使用属性外,fileset还支持0到n个嵌套patternset元素,比如<exclude></exclude>和<include></include>等,关于patternset会在下面讲解到,这里先贴出修改后的demo。

<target name="build-all2">        <echo>build-all2</echo>        <concat destfile="uploader2.js" encoding="utf8" outputencoding="utf8">            <fileset dir="${uploader.dir}" >                <include name="**/*.js" />                <exclude name="demo/*.js" />            </fileset>        </concat>    </target>

这里的demo代码,与上一个demo相比,增加了一个排除文件模式,demo目录下的js文件,显然我们不需要,可以通过标签予以排除


filelist

filelist通常与dependset任务一同使用,dependset任务用于将一个或多个源文件和1个或多个目标文件相比较,如果源文件存在更新或者删除,那么所有目标文件将将被删除。dependset用于确保文件的依赖性。

filelist的属性

属性

说明

dir

fileset的基目录

files

用逗号隔开的文件列表

refid

对某处定义的一个的引用,这对于希望多次复用一个定义的文件列表,非常有用。

filelist的使用率不高,明河这里偷个懒,不再制作个独立的demo。


path

path在java打包编译中常用到,可以以属性(多个路径用冒号或分号隔开)或嵌套元素的方式。
path用于转换路径为当前用户操作系统可兼容的路径。(path dataType并不只有 元素,还有等形式标签)。

当path以标签的形式出现时,拥有以下属性:

属性

说明

location

表示一个文件或目录

path

一个文件和路径名列表,以冒号或分号隔开

refid

定义path的一个引用


patternset

patternset与fileset是紧密结合的,常作为fileset的嵌套元素出现,比如exclude标签。

<target name="build-all3">        <echo>build-all3</echo>        <concat destfile="uploader2.js" encoding="utf8" outputencoding="utf8">            <fileset dir="${uploader.dir}" >                <include name="**/*.js" if="test" />                <exclude name="demo/*.js" unless="demo" />            </fileset>        </concat>    </target>

留意代码中的if和unless属性,if=”test”可以理解为如果存在test属性,就读取文件,unless=”demo”可以理解为只有未设置demo属性时才读取文件。


argument

arg标签在apply、exec、java标签内嵌套,用于传递命名行参数。
先贴出日后会说明的demo代码:

<apply executable="java" verbose="true" dest="${combines.dir}" failonerror="true" parallel="false"><fileset dir="${combines.dir}" includes="**/*.js"/><arg line="-jar"/><arg path="${current.dir}/closure-compiler/compiler.jar"/><arg line="--charset gbk"/><arg value="--warning_level"/><arg value="QUIET"/><arg value="--js"/><srcfile/><arg value="--js_output_file"/><targetfile/><mapper type="regexp" from="^(.*)\.source\.js$" to="\1-min.js"/></apply>

上述代码是调用google压缩器压缩js源文件,apply嵌套多个arg标签,比如下面的代码:
<arg path="${current.dir}/closure-compiler/compiler.jar"></arg><arg line="--charset gbk"></arg><arg value="--warning_level"></arg><arg value="QUIET"></arg><arg value="--js"></arg>

执行时会合并成一个命名行,类似–charset gbk –warning_level QUIET –js。

明河结语

理论部分讲解结束,接下来的教程将是ant的实战部分,比如ant结合yahoo和google的压缩器。


转自:http://www.36ria.com/4591


0 0
原创粉丝点击