Ant为我们提供了很多Task来辅助我们完成复杂工作,提供的太多了只针对部分进行解说。详细信息可访问:https://ant.apache.org/manual/index.html
注意:由于表格显示的效果不好,不过可以查看利用GitBook编写的《Ant核心任务》。
一、 Ant Task【任务】
作用:执行过程中调用并执行其他target
。
注意:虽然Ant
任务与Ant
重名,但是不是一回事。
Ant
任务的作用是执行项目的子项目的构件文件,值得注意的是Ant
任务依赖于target
元素,需要在某个target
元素中使用,不能在target
元素外独立使用。
属性 | 作用 |
---|---|
antfile | 指定要执行的构件文件的名称,可包含路径信息。 |
dir | 用于指定构件文件所在的目录,相当于指定了要执行的构件文件的basedir 属性。这个属性设定后,被执行的构件文件的basedir 属性将被dir 属性的值取代。 |
target | 指定被执行的构件文件中所要执行的target ,如果target 属性没有设定,那么将会执行被调用的构件文件中默认target 。 |
output | 指定Ant 工具执行时的信息输出,可定位到控制台或定位到文件中。 |
inheritAll | 用于指定被调用的构件文件的project 元素中可使用当前project 元素中的属性。这个属性类似于Java 程序中类的继承关系。默认inheritAll属性取值为true。 |
inheritRefs | 如果设定了inheritRefs 属性为true ,那么被调用的构件文件中的project 元素可引用当前project 元素中的reference (参考)任务。 |
Reference
任务的作用是把当前的属性复制到被调用的Ant project
中使用。
Reference
任务包含以下两个属性:
refid
属性:这个属性代表当前project
中的属性id
torefid
属性:用于指定在被调用的project
中的引用id
<reference refid="path1" torefid="path2"/>
<!-- 把当前project中的path1属性传递给被调用的project中使用,在被调用project中通过path2引用这个属性 -->
注意:当输出信息到文件中时,相当于在命令行指定-logfile<file>,-l<file>
选项。如果指定了dir
属性,那么被指定的输出文件的位置是相对于dir
属性指定的目录的,当然也可以通过绝对路径指定。
使用Ant Task整合子项目的实例
在实际的项目中,大的项目都会拆分成独立的几个子项目,开发完后在整合在一起。这样做有利于项目的独立测试和长期维护。
<1>指定子项目
<!-- 指定子项目构件文件及根目录,同时指定要执行的target -->
<ant antfile="subproject/subbuild.xml" dir="subproject" target="compile"/>
<2>指定属性并在子项目中调用
<!-- 由于在默认时 inheritAll="true",因为当前项目中定义的param1属性和属性文件default.properties都可以在子项目中引用 -->
<ant antfile="subproject/property_based_subbuild.xml">
<property name="param1" value="version 1.x"/>
<property file="config/subproject/default.properties"/>
</ant>
<3>继承关系
假设在当前构件文件中定义了以下元素:
<path id="path1">
...
</path>
<path id="path2">
...
</path>
...
<ant antfile="subbuild.xml" inheritrefs="true"/>
...
在被调用的subbuild.xml
中定义了<path>
类型的path1
但没定义<path>
类型的path2
。那么刚执行构件文件时,被调用的Ant project
中的path1
不会被覆盖,但path2
可以被调用。如果指定inheritrefs=“false”
,那么在被调用的project
中既不会覆盖path1
也不能引用path2
。
当需要覆盖path1时可把Ant任务改为:
<ant antfile="subbuild.xml" inheritrefs="false">
<reference refid="path1"/>
</ant>
当需要当前project
中的path1
同时也要使用本身的path1
,那可以通过reference
做到,改写Ant
任务为:
<ant antfile="subbuild.xml" inheritrefs="false">
<reference refid="path1" torefid="path2"/>
</ant>
这个任务的作用是,再被调用的project
中建立对当前project
中的path1
的引用,并命名为path2
。在被调用的project
中可通过path2
来引用。
二、AntCall Task【任务】
作用:执行过程中调用并执行其他target。
AntCall
任务的作用是允许一个target
的执行过程中调用并执行其他的target
。
在打包项目前需要对项目进行编译,那么可以在打包项目的target
中通过AntCall
任务使得编译的target
先执行。当然这种情况也可以通过target
间设置depends
属性来实现。AntCall
任务必须在target
元素内执行,这个任务不能在target
元素外执行。
2.1 AntCall Task属性及功能
属性 | 功能 |
---|---|
target | 指定要被调用执行的target ,通过名称指定这个target 属性是必须的。值得注意的是,当通过AntCall 任务调用的target 存在依赖的target ,则depends 属性中被指定的target 也会被执行。 |
inheritAll | 用于指定是否继承当前的属性。默认时为true,代表被调用的target可使用这些属性。 |
inhertRefs | 用于指定是否覆盖reference 属性或者是否建立一个对当前reference 属性的引用。在默认情况下,AntCall 任务不会被覆盖reference 属性,除非把inheritRefs 属性设为true 。默认时inheritRefs属性为false。 |
2.2 利用AntCall Task实现target间调用时传递参数的实例
当需要从一个target传递参数到被调用的target
时,可以使用<param>
类型进行传递。当然也可以在target
中定义property
来实现,与Java
中的方法调用时传递参数相似。
实例如下:
<?xml version="1.0"?>
<project name="antcallSample" default="targeA">
<target name="init">
<echo message="在init target中"/>
</target>
<target name="targeA">
<echo message="在targetA中调用targetB"/>
<!-- 通过property传递 -->
<property name="prop" value="prop property"/>
<antcall target="targetB">
<!-- 通过antcall设定param实现 -->
<param name="path1" value="path1 param"/>
</antcall>
<echo message="调用targetB之后。。。"/>
</target>
<target name="targetB" depends="init">
<echo message="在targetB中。。。"/>
<echo message="path1=${path1}"/>
<echo message="prop=${prop}"/>
</target>
</project>
运行结果:
E:\Workspace\ceshi>ant
Buildfile: E:\Workspace\ceshi\build.xml
targeA:
[echo] 在targetA中调用targetB
init:
[echo] 在init target中
targetB:
[echo] 在targetB中。。。
[echo] path1=path1 param
[echo] prop=prop property
[echo] 调用targetB之后。。。
BUILD SUCCESSFUL
Total time: 1 second
三、Apply/ExecOn Task
作用:通过Ant工具直接执行系统命令。
通过这个Task
执行系统命令,这个命令依赖操作系统,而且只能在Ant
支持的操作系统下执行。Ant
支持Windows、Linux、UNIX、OS/2 Warp、Novell Netware 6
和MacOS X
。
3.1 Apply/ExecOn属性及功能
属性 | 功能 |
---|---|
executable | 用于指定要执行的命令,不带命令行参数,这个属性是必须的。 |
dest | 用于指定命令执行时目标文件的存放位置。 |
spawn | 用于指定是否在执行命令时产生输出信息,取值为true,表示Ant将不会产生这个命令的日志输出。默认为false。 |
dir | 用于指定执行命令所在的目录,在此目录下执行这个命令。 |
relative | 用于指定命令是否支持相对路径。默认为false,不支持相对路径,相对于当前目录或dest属性设定的目录。 |
forwardslash | 用于设定文件路径是否支持斜线分隔符,尽管有些操作系统支持其他的分隔符。默认时为false,如果操作系统的分隔符为斜线,那么这个属性将被忽略。 |
os | 列出允许执行这个命令的操作系统。 |
output | 指定把命令行执行的输出重定向到一个输出文件。如果错误信息没有重定向到特定文件,错误信息则将输出到这个文件中。 |
error | 指定一个文件用于接收错误的输出信息。从Ant1.6后提供了这个属性。 |
logErrot | 这个属性用于指定把错误的日志输出到Ant工具的日志信息中,也可以通过error属性指定到错误的输出文件。 |
append | 指定是否可以输出到一个存在的文件或者覆盖存在的文件,默认为false。 |
outputproperty | 指定输出定向到的属性的名字,在属性中可定义一个文件,这样就可以把输出信息输出到文件中。 |
errorproperty | 用于指定把错误信息输出到的属性的名字。 |
input | 指定一个文件,从这个文件中读取属性,在执行命令时可以引用得到这些属性。 |
inputstring | 用于把inputstring属性指定的字符串传递给执行的命令。 |
resultproperty | 这个属性用于存放命令执行后所返回的结果。 |
timeout | 设定一个时间,如果这段时间内命令没执行完毕,则这个命令会被中断。 |
failonerror | 这个属性用于指定是否出错时命令终止。如果属性取值为true,那么在执行的命令退出的同时返回一个部位0的代码,则构建进程将会终止。 |
failifexecutionfails | 用于指定当不能执行程序时是否终止构建命令的执行。默认为true。 |
skipemptyfilesets | 当指定的目录中没有文件,则构建明令将不会被执行。 |
parallel | 如果属性为true,则构建命令只执行一次,并把附加的文件作为命令参数。如果为false则每一个附加的文件都会执行一次这个命令。默认为false。 |
type | 指定传给要执行的命令的参数类型,可为file(文件),dir(目录),path(路径)。默认为false。 |
newenvironment | 如果当前的环境变量被声明,将不传递旧的环境变量,魔人认为false。 |
vmlauncher | 默认为true,通过Java虚拟机的特性来进行构件文件。如果为false,则通过操作系统本身的脚本功能去执行。 |
resolveExecutable | 默认为false,如果设为true,那么命令会在project的根目录下执行。如果在UNIX或Linux下只允许用户在自己的路径下执行这个命令,那么要把这个属性设为false。 |
maxparallel | 设定一个最大的平行值,用于指定一次执行的源文件的最大数目。如果设定为<0代表没有限制。默认为没有限制。 |
addsourcefile | 是否自动添加源文件名到执行的命令中,默认为true。 |
verbose | 是否输出命令执行时的概要信息,默认为false不输出。 |
ignoremissing | 是否忽略不存在的文件,默认为true。 |
force | 是否通过timestamp来对target文件进行对比。默认为false。 |
3.2 Apply/ExecOn Task可使用的参数
执行Apply/ExecOn
任务时可以通过Ant
提供的内置类型来简化操作,类似于参数传递的作用。
可使用的Ant
类型有:
- FileSet:可以通过<fileset>元素来设定文件集合,在任务中引用这个FileSet。
- FileList:可以通过一个或多个FilList来指定文件列表,然后在Apply/ExecOn Task中进行引用。
- DirSet:通过DirSet定义目录集合,然后在Apply/ExecOn Task中进行引用。
- Arg:可通过<arg>类型指定命令行参数,然后在Apply/ExecOn Task中使用。
- Mapper:通过Mapper类型可以指定dest属性的文件的映射关系。
- Srcfile:通过参数指定源文件,在<arg>的后面使用,<arg>参数的值为Srcfile指定的源文件。
- Targetfile:与Srcfile作用相似,用于指定目录文件的参数。
- Env:指定一个环境变量,并在命令行中传递,以<env>类型的形式使用。
3.3 通过Apply/ExecOn Task执行Linux下ls命令的实例
<apply executable="ls">
<arg value="-l"/>
<fileset dir="/tmp">
<patternset>
<exclude name="**/*.txt"/>
</patternset>
</fileset>
<fileset refid="other.files"/>
</apply>
这个例子的作用是:调用ls -l
的shell
命令,列出/tmp
目录下的所有非.txt
文件和所有为other.files
的FileSet
类型所指定的文件的详细信息。
3.4 使用Mapper、Srcfile类型的实例
<apply executable="cc" dest="src/C" parallel="false">
<arg value="-c"/>
<arg value="-o"/>
<targetfile/>
<srcfile/>
<fileset dir="src/C" includes="*.c"/>
<mapper type="glob" from="*.c" to="*.o"/>
</apply>
这个例子的作用是:通过Mapper
指定为每个比.o
文件新的.c
文件执行cc -c -o targetfile sourcefile
命令。这个命令中用.o
文件的名称替换targetfile
(目标文件),用.c
文件的名称替换sourcefile
(源文件)。
四、Chmod Task
作用:改变Linux/UNIX
系统的文件权限。
在UNIX
和Linux
系统下要改变文件的权限,可以使用chmod
的shell
命令。在Chmod
任务中可以引用FileSet
和DirSet
类型指定的文件集合和目录集合。
4.1 Chmod Task属性及功能
属性 | 功能 |
---|---|
file | 用于指定即将被给变权限的文件名称。 |
dir | 用于指定这个目录下的所有文件的权限将要被改变。在Chmod任务中dir属性和file属性两者必须选择其中一个。 |
perm | 用于指定文件的新权限。 |
includes | 用于指定一个或多个文件的匹配模式,只有符合这些模式的文件的权限才会被改变。可用逗号符或空格符进行分隔。 |
excludes | 与includes属性的作用正好相反。 |
defaultexcludes | 用于指定是否不包括Ant工具默认不包含的文件匹配模式。可取值为yes或no。忽略此属性时代表不包含默认的不包含的文件模式。在Ant工具中默认不包含的文件模式如:**/*~,**/#*#,**/.#*,**/%*%,**/._*,**/CVS,**/CVS/**,**/.cvsignore,**/SCCS,**/SCCS/**,**/vssver.scc,**/.svn,**/.svn/**,**/.DS_Store |
parallel | 用于指定是否为每个包含的文件独立执行Chmod命令,默认为true。 |
type | 可取值 为file、dir或both。取值file表示只改变文件的权限;若取值dir表示只改变目录的权限;若取值both则代表改变文件和目录两者的权限。 |
maxparallel | 用于指定一次执行Chmod命令的最大值。设为 < =0代表不限制,默认为不限制。 |
verbose | 用于指定在执行命令后是否输出这个命令的执行信息。默认为false不输出。 |
4.2 通过Ant改变Linux/UNIX文件和目录权限的例子
在Linux
和UNIX
下通常通过Chmod
命令来改变或目录的权限,Ant
工具的Chmod
任务也能实现同样地功能。
改变start.sh
文件的权限让所有人对此文件具有读和执行的权限:
<chmod file="${dist}/start.sh" perm="ugo+rx"/>
所有用户对${dist}/start.sh
文件都具有读和执行的权限。如果只有文件的所有者才具有读、写和执行权限,那么可以编写以下程序:
<chmod file="${dist}/start.sh" perm="o+rx"/>
当然也可以用数值来表示权限,上面的程序可改变:
<!-- 与上面的程序作用形同,文件的所有者才具有读、写和执行的权限 -->
<chmod file=${dist}/start.sh} perm="700"/>
当然也可以通过FileSet和DirSet类型实现更复杂的功能,例如:
<chmod perm="go-rwx" type="file">
<fileset dir="/web">
<include name="**/*.cgi"/>
<include name="**/*.old"/>
</fileset>
<dirset dir="/web">
<include name="**/private_*"/>
</dirset>
</chmod>
这个例子的作用是让不是文件的所有者可以访问cgi
脚本。文件的权限将会改变的文件有:所有/web
目录下的.cgi
和.old
文件,所有以private_*
开头的文件或目录以private_*
开头的目录下的文件。
五、Copy Task
作用:对文件和目录进行复制
Copy任务是把一个或多个文件复制到指定的目录下。但要注意的是,如果目标目录下具有同名的文件,那么只有当源文件相对于目标文件更新时,Ant工具才会复制这个文件。
5.1 Copy Task的属性及功能
属性 | 功能 |
---|---|
file | 用于指定要复制的源文件。 |
preservelastmodified | 作用是使得复制后的文件与源文件的最后修改时间相同,默认为false。 |
tofile | 用于指定要复制到的文件。 |
todir | 用于指定要复制到的目标目录。todir和tofile只能使用其中一个属性。 |
overwrite | 用于指定是否需要覆盖目录和文件,不管问价是否比源文件新,都会覆盖,默认为false。 |
filtering | 用于指定在复制时是否使用构件文件的全局过滤器对文件进行过滤,默认为false。 |
flatten | 用于指定是否需要复制目录,如果为true代表把所有的文件复制到todir属性设定的目录下,默认为false,复制目录。 |
includeEmptyDirs | 用于指定是否复制空目录,默认为true。 |
failonerror | 用于指定当遇到错误时是否停止执行,默认为true。 |
verbose | 用于指定当复制文件时是否记录日志信息。 |
encoding | 用于设定复制文件时的编码或文件过滤器使用的编码方式。默认时使用Java虚拟机的编码方式。 |
outputencoding | 用于设定写文件时的编码方式。默认时使用Java虚拟机的编码方式。 |
enablemultiplemappings | 用于设定是否允许多个映射。默认为false。 |
granularity | 用于指定一个文件修改时间的毫秒数据的允许误差。因为不是所有的文件系统的修改时间都是精确到毫秒数。默认为0,如果为DOS系统则为2. |
5.2 通过Copy Task实现文件和目录复制功能实例
5.2.1 对单个文件进行复制
<copy file="myfile.txt" tofile="mycopy.txt"/>
<copy file="myfile.txt" todir="../some/other/dir"/>
5.2.2 对文件目录进行复制
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
上面是个简单的例子,下面这个例子在复制的时候去除掉了非Java
文件并且复制后重命名为.bak
后缀的文件,以作备份:
<copy todir="../backup/dir>
<fileset dir="src_dir">
<exclude name="**/*.java/>
</fileset>
<globmapper from="*" to="*.bak"/>
</copy>
5.2.3 在执行Copy Task时使用文件过滤的实例
下面是一个复制文件的同时替换文件中的特殊符号的例子:
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<fileset>
<fileset token="TITLE" value="Foo Bar"/>
</fileset>
</copy>
这个例子的作用是把src_dir
目录下的所有文件复制到../backup/dir
目录,并在所有文件中查找并替换@TITLE@
为Foo Bar
。当要进行新产品发布时通过需要替换文件中的版本信息和时间信息。
六、Delete Task
作用:对文件和目录进行删除。
默认时不会删除空目录,要删除空目录可以设定includeEmptyDirs
属性为true
。在Delete
任务中可以使用FileSet
和DirSet
类型。
6.1 Delete Task 的属性及功能
属性 | 功能 |
---|---|
file | 用于指定要删除的文件的名称,可以为相对路径或绝对路径。 |
dir | 指定一个将要被删除的根目录。这个目录下的子目录及文件将可能被删除。dir属性和file属性两者必须指定其一。 |
verbose | 作用是指定是否在命令行中输出被删除的文件的名称。默认为false。 |
quiet | 作用是指定当要被删除的文件或目录不存在时是否不显示提示信息。默认为false,代表要显示提示信息。 |
failonerror | 用于指定当出现错误时是否停止执行命令。 |
includeemptydirs | 表示当使用FileSet类型时是否删除空的目录。 |
includes | 用于指定将要删除的文件或目录的模式。可用逗号或空格符进行分隔。 |
includesfile | 用于指定要删除的文件的模式。 |
excludes | 用于指定一个或多个文件模式或目录模式。这些符合条件的文件和目录将不被删除。 |
excludesfile | 用于指定将不被删除的文件模式,已不建议使用。 |
defaultexcludes | 用于指定是否使用Ant默认的default excludes模式,已不建议使用。 |
deleteonexit | 用于指定是否采用Java File类中的DeleteOnExit()方法进行判断,如果使用这个方法,那么仅当存在文件时才进行删除,默认取值为false。 |
6.2 在执行Delete Task时使用文件过滤的实例
6.2.1 删除单个文件
<delete file="/lib/ant.jar"/>
6.2.2 删除目录的实例
<delete dir="lib"/>
这个例子的作用是删除lib
目录,包括这个目录的所有子目录及文件,可以通过include
或exclude
类型指定删除的部分文件,而不是目录下的所有文件。
6.2.3 删除所有备份文件和空的目录的例子
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak"/>
</delete>
七、Echo Task:
作用:输出系统信息。
Echo
任务的作用是根据logger
(日志)或listener
(监听器)的级别输出相应的信息。相当于Java
中的System.out
来输出信息。
7.1 Echo 任务的属性及功能
属性 | 功能 |
---|---|
message | 用于定义要输出的信息。这个属性是必需的。 |
file | 用于定义一个文件。这个文件用于接收message定义的输出信息,当设定为把信息输出到接收文件时才起作用。 |
append | 用于指定信息是否输出到指定的文件。默认为false。 |
level | 用于指定这个信息的级别。可取值为error,warning,info,verbose或debug。 |
输出到具体的文件中:
<echo message="This is simple message" file="/logs/messge.log" append="true"/>
八、Mkdir Task
作用:创建目录。
Mkdir
任务只有一个属性dir
,dir
属性用于指定要创建的目录名称,可为相对路径也可以为绝对路径。
<property name="dist" value="dist"/>
<mkdir dir="${dist}"/>
九、Move Task
作用:移动文件和目录
Move
任务用于移动文件和目录,默认时Move
任务会覆盖目标文件或目录(如果目标文件或目录存在)。当关闭overwrite
时,Move
任务只会移动源文件比目标文件新的文件,或者目标文件不存在时才移动。在Move
任务中可以引用FileSet
类型。
9.1 Move Task的属性及功能
属性 | 功能 |
---|---|
file | 用于指定要移动的文件或目录 |
preservelastmodified | 用于指定移动后的文件的最后修改时间与源文件相同 |
tofile | 作用是指定移动后的文件新名称和位置 |
todir | 作用是指定文件目录的目标位置 |
overwrite | 用于设定当源文件的最后修改时间大于目标文件的最后修改时间时,是否用袁恩建覆盖目标文件,默认为true |
filtering | 用于定义在移动时是否允许符号过滤 |
flatten | 作用是忽略目录结构。把各层目录下的文件移动到同一个目录下,默认为false |
includeEmptyDirs | 用于指定在移动时是否忽略空目录,默认为false |
failonerror | 用于定义当出现错误时是忽略并继续执行,还是当遇到错误时就停止执行命令 |
verbose | 用于指定当文件移动时是否输出日志信息 |
encoding | 用于定义在移动文件时使用的过滤器的编码方式 |
outputencoding | 用于定义在写文件时使用的编码方式 |
enablemutiplemapping | 用于指定是否可以使用多个映射,默认时只使用一个映射 |
granularity | 用于指定一个文件修改时间的毫秒数据的允许误差。因为不是所有文件系统的修改时间都精确到毫秒数,默认时为0,如果DOS系统则为2 |
9.2 使用Move Task实现移动文件和目录功能的实例
9.2.1 移动单个文件
<move file="file.org" tofile="file.moved"/>
作用:重命名file.org
文件为file.moved
。
<move file="file.org" todir="dir/to/move/to"/>
作用:把文件file.org
移动到dir/to/move/to
目录下。
9.2.2 移动目录
<move todir="new/dir/to/move/to">
<fileset dir="src/dir"/>
</move>
作用:把src/dir
目录移动到new/dir/to/move/to
目录。
在Ant1.6.3
版本后,可以使用以下file
属性来指定目录从而实现上面目录移动的功能:
<move file="src/dir" tofile="new/dir/to/move/to"/>
9.2.3 使用Mapper功能
<move todir="my/src/move" includeemptydirs="false">
<fileset dir="my/src/dir">
<exclude name="**/*.bak"/>
</fileset>
<mapper type="glob" from="*" to="*.bak"/>
</move>
作用:把my/src/dir
目录下的所有文件移动到my/src/move
并重命名为.bak
的备份文件。
十、Zip Task
作用:创建Zip文件
Zip这个任务用于实现打包zip文件的功能。在Zip任务里可以直接嵌套使用FileSet类型、include类型、exclude类型等,在这些文件类型中还可以对文件进行过滤。
10.1 Zip Task的属性及功能
属性 | 功能 |
---|---|
destfile | 用于指定将要打包的zip文件 |
zipfile | 也用于指定要打包的zip文件,但已不建议使用,应该使用destfile属性来代替,zipfile属性和destfile属性两者必须选择其一 |
basedir | 用于指定打包zip文件的目录 |
compress | 用于指定是否使用压缩的形式来保存数据,默认为true(对数据进行压缩) |
keepcompression | 用于指定已压缩的zip文件保持原先的压缩格式,默认为false |
encoding | 用于指定Zip任务里的文件名称的编码方式。默认时采用操作系统的编码方式 |
filesonly | 用于指定是否在Zip任务中只存储文件,默认为false |
includes | 用于指定一个或多个在Zip任务中要包含的文件。可以使用逗号或空格符进行分隔,当这个属性被忽略时代表zip将包含所有文件 |
includesfile | 用于指定zip文件中要包含的文件的名称 |
excludes | 用于指定一个或多个Zip任务中不被包含的文件。可以使用逗号或空格符进行分隔,当这个属性被忽略时代表Zip任务将包含所有文件 |
excludesfile | 用于指定在Zip任务中不被包含的文件的名称 |
defaultexcludes | 用于定义是否在Zip中不包含Ant默认要排除的文件模式。可取值为yes或no,忽略时代表使用默认的排除文件模式,将不包含符合这些模式的文件 |
update | 用于定义是否更新或覆盖目标文件,当目标文件已存在时,默认为false |
whenempty | 用于指定当没有满足打包条件的文件时的处理方式。可取值为fail、skip和create。fail代表创建zip失败,skip代表忽略不处理,create代表依然创建zip文件,默认为skip |
duplicate | 定义当出现重复文件时的处理方式。可取值add、preserve和fail。add代表依然添加(覆盖)文件,preserve代表不打包重复文件,fail代表将打包失败,默认为add |
roundup | 用于指定打包zip文件时文件的修改时间是否采用下一个连续的秒数,默认为true |
comment | 作用是在zip文件中加上注释 |
10.2 使用Zip Task打包zip文件的实例
10.2.1 打包zip文件的实例
<zip destfile="${dist}/manual.zip" basedir="htdocs/manual" includes="api/**/*.html" excludes="**/todo.html" />
作用:打包htdocs/manual
目录下的文件,并且命名为manual.zip
。在这个zip
文件中只包含htdocs/manual/api
目录或其子目录下的html
文件,但不包含其中文件名为todo.html
文件。
10.2.2 使用ZipFileSet类型的Zip任务实例
<zip destfile="${dist}/manual.zip">
<zipfileset dir="htdocs/manual" prefix="docs/user-guide"/>
<zipfileset dir="." includes="ChangeLog27.txt" fullpath="docs/ChangeLog.txt"/>
<zipfileset src="examples.zip" includes="**/*.html" prefix="docs/examples"/>
</zip>
作用:把htdocs/manual
目录下的所有文件及子目录打包到doc/user-guide
目录下;把当前目录下的ChangeLog27.txt
文件打包为docs/ChangLog.txt
;同时把example.zip
下的所有html
文件打包到docs/examples
下。
10.2.3 使用zipgroupfileset的zip任务实例
<zip destfile="${dist}/manual.zip">
<zipfileset dir="htdocs/manual" prefix="docs/user-guide"/>
<zipgroupfileset dir="." includes="examples*.zip"/>
</zip>
作用:把htdocs/manual
下的所有目录及文件打包到docs/user-guide
下;同时包含所有zip
文件名为example*.zip
的文件,例如example1.zip
。
十一、LoadProperties:加载属性文件
为了便于维护和细分功能。通常会把Ant
中定义的property
元素放到一个或多个.properties
文件中定义,然后在Ant
中引入这些属性。LoadProperty
可以导入.properties
文件的功能,从而把property
文件中的property
元素导入Ant
构件文件中。
11.1 LoadProperties Task的属性及功能
属性 | 功能 |
---|---|
srcFile | 定义要导入的属性文件 |
resource | 也用于指定属性文件的名称,resource属性和srcFile属性两者必须指定其一 |
encoding | 指定导入文件时的编码方式 |
classpath | 指定查找resource指定的文件的路径 |
classpathref | 用于指定一个classpath类型的引用,当在查找resource指定的文件时使用 |
11.2 LoadProperties Task加在属性文件的实例
这里举一个文件复制的例子。假设现在需要把src
目录下的所有文件复制到dest
目录下,这里使用copyproperties
文件来定义源文件和目标文件的位置,然后在Ant
工具中使用copy.properties
中定义的属性。当文件目录改变时,只需要改变copy.properties
中的属性,而不需要改变build.xml
。
copy.properties
文件内容:
copy.src=src
copy.dest=dest
aaa=ceshi
下面的额构件文件中也是用一个文件行的过滤器:
<?xml version="1.0"?>
<project name="loadpropertiesSample" default="copyFile">
<!-- 导入属性文件 -->
<loadproperties srcFile="copy.properties">
<!-- 定义文件过滤器 -->
<filterchain>
<linecontains>
<contains value="copy." />
</linecontains>
</filterchain>
</loadproperties>
<!-- 复制文件 -->
<target name="copyFile">
<copy todir="${copy.dest}">
<fileset dir="${copy.src}" />
</copy>
<echo message="${aaa}" />
</target>
</project>
运行结果:
E:\Workspace\ceshi\111>ant
Buildfile: E:\Workspace\ceshi\111\build.xml
copyFile:
[copy] Copying 1 file to E:\Workspace\ceshi\111\dest
[echo] ${aaa}
BUILD SUCCESSFUL
Total time: 2 seconds
十二、Tstamp Task
作用:获取并格式化日期或时间
Tstamp
任务的作用是设定当前日期和时间的格式,可在target
中使用。默认时日期的格式为yyyyMMdd
(例如:20060516
)。默认的时间格式为hhmm
(例如:1200)。默认时Ant
工具设定TODAY
(今天)格式MMMM dd yy
(例如:May 05 06
)。这些格式与Java
的日期格式相同。
12.1 Tstamp Task的属性及功能
属性 | 功能 |
---|---|
property | 用于定义一个属性名称,通过这个属性可以得到Tstamp格式化后的日期或时间 |
pattern | 用于设定要格式化时间或日期的格式,与Java中的SimpleDateFormat类中的格式相同 |
timezone | 用于指定格式化时的时区,与Java中的timezone类中定义的相同 |
unit | 用于设定与当时时间相差的单位。可设为millisecond(毫秒)、second(秒)、minute(分钟)、hour(小时)、day(日)、week(周)、month(月)和year(年) |
offset | 用于设定与当前时间相差的值,单位由unit设定 |
locale | 用于指定格式化的locale值(不同国家和语言有不同的值)。与Java中的Locale类指定的il8n国际化功能时间,用不同国家的日期格式 |
12.2 通过Tstamp Task格式化日期和时间的例子
用Tstamp
格式化日期的时间的例子如下:
<?xml version="1.0"?>
<project name="timestamp" default="timestampTarget">
<tstamp>
<format property="TODAY_UK" pattern="d-MMMM-yyyy" locale="en"/>
</tstamp>
<tstamp>
<format property="TODAY_CN" pattern="d-MMMM-yyyy" locale="zh"/>
</tstamp>
<tstamp>
<format property="touch.time" pattern="MM/dd/yyyy hh:mm aa" offset="-5" unit="hour"/>
</tstamp>
<!-- 输出的日期格式定义 -->
<target name="timestampTarget" >
<echo message="${DSTAMP}"/>
<echo message="${TODAY_UK}" />
<echo message="${TODAY_CN}" />
<echo message="${touch.time}" />
</target>
</project>
运行结果:
E:\Workspace\ceshi\111>ant -f timestamp.xml
Buildfile: E:\Workspace\ceshi\111\timestamp.xml
timestampTarget:
[echo] 20161217
[echo] 17-December-2016
[echo] 17-十二月-2016
[echo] 12/17/2016 07:49 上午
BUILD SUCCESSFUL
Total time: 0 seconds
参考资料:
《Ant开发及整合应用详解》