写到有关Ant的博客第4篇了,ant中主要是任务,所以今天使用一下任务。Ant提供了大量的核心Task和可选Task,除此之外Ant还允许用户定义自己的task,这对于扩展Ant来说是非常好的。所以先总结一下一些常用的核心的任务。
常用的核心任务:
ant:该任务的含义是基于另一个构建文件中的一个目标调用Ant。
ant任务的属性如下图所示:
例如在目录下有如下build.xml文件,该文件调用ant.xml构建文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="run" > <target name="run"> <ant antfile="ant.xml"/> </target> </project>
ant.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <project default="first"> <description>描述的信息</description> <property name="hello" value="welcome"/> <target name="first"> <mkdir dir="文件夹1"/> <mkdir dir="文件夹2"/> <mkdir dir="文件夹3"/> </target> </project>
运行结果如下所示:
也可以在执行的时候调用另一个构建文件中的某个目标。
antcall:该任务的含义是调用当前构建文件中的另一个目标(target)。
antcall任务的属性如下所示:
例如在目录下有如下build.xml文件,首先会执行antcall目标中的antcall任务,又会执行first目标如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="antcall" > <target name="antcall"> <antcall target="first"/> </target> <target name="first"> <mkdir dir="文件夹1"/> <mkdir dir="文件夹2"/> <mkdir dir="文件夹3"/> </target> </project>
运行结果如下所示:
copy:该任务的含义是用于复制文件或目录。
copy任务的属性如下所示:
例如:
复制单个文件:
<copy file="myfile.txt" tofile="mycopy.txt"/>
复制单个文件到指定的目录:
<copy file="myfile.txt" todir="../some/other/dir"/>
复制一个目录到另一个目录下:
<copy todir="../new/dir"> <fileset dir="src_dir"/> </copy>
复制一批文件到另外一个目录下,其中fileset为文件集:
<copy todir="../dest/dir"> <fileset dir="src_dir"> <exclude name="**/*.java"/> </fileset> </copy> <copy todir="../dest/dir"> <fileset dir="src_dir" excludes="**/*.java"/> </copy>
复制一批文件到指定目录下,在文件名后增加.bak后缀:
<copy todir="../backup/dir"> <fileset dir="src_dir"/> <globmapper from="*" to="*.bak"/> </copy>
delete:该任务的含义是用于删除文件或目录。
delete任务的属性如下所示:
例如:
删除一个文件:
<delete file="/lib/ant.jar"/>
删除指定目录及其子目录:
<delete dir="lib"/>
删除指定的一组文件:
<delete> <fileset dir="." includes="**/*.bak"/> </delete>
删除指定目录及其子目录:
<delete includeEmptyDirs="true"> <fileset dir="build"/> </delete>
删除指定目录的子目录:
<delete includeemptydirs="true"> <fileset dir="build" includes="**/*"/> </delete>
javac:该任务的含义是用于编译一个或多个Java源文件,通常需要srcdir和destdir两个常用属性,用于指定Java源文件的位置和编译后class文件的保存位置。由于javac任务的属性比较多,所以便没有截图。
例如在目录下有如下build.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="compile" > <target name="compile"> <mkdir dir="编译文件夹"/> <javac srcdir="." destdir="编译文件夹" includeantruntime="true"/> </target> </project>
运行结果如下所示:
java:该任务的含义是用于运行某个java类,通常需要classname属性,指定需要运行的类。
java任务的属性如下所示:
例如在目录下有如下build.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="run" > <target name="run"> <java classname="HelloWorld"/> </target> </project>
运行的结果如下所示:
jar:该任务的含义是用于生成jar包,通常需要destfile属性和basedir属性,用于指定多创建的jar包的文件名和打成jar文件的路径。
jar任务的部分属性如下所示:
例如在目录下有如下build.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="dabao" > <target name="dabao"> <mkdir dir="jar"/> <jar destfile="jar/long.jar" basedir="."/> </target> </project>:
运行的结果如下所示:
sql:该任务的含义是用于执行一条或多条SQL语句,通常需要driver、url、userid、password属性,用于指定连接数据库的驱动类,数据库URL,用户名和密码等,还可以通过src来指定需要指定的SQL脚本文件,或者直接使用文本内容的方式指定SQL脚本字符串。如果jdbc的驱动程序在当前文件夹,没在环境变量中的化,需要指定classpath的路径。
sql任务的部分属性如下所示:
例如在目录下有如下build.xml文件,该文件是通过sql任务用jdbc的方式去连接mysql数据库,并插入一条数据,其中classpath属性为驱动程序所在的位置:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="db" > <target name="db"> <sql driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" userid="root" password="longyu" classpath="mysql-connector-java-5.1.7-bin.jar"> insert into employee values('2010221000','Wang Chao','M',35,''); </sql> </target> </project>
运行之前的表数据结果如下所示:
运行之后的表数据结果如下所示:
echo:该任务的含义是用于输出某个字符串。
echo任务的属性如下所示:
例如:输出“HelloWorld”:
<echo message="HelloWorld"/>
输出一段话:
<echo> This is a longer message stretching over three lines; the first line is a blank </echo>
exec:该任务的含义是执行操作系统的特定命令,通常需要executable属性,用于指定想要执行的命令。
exec任务的部分属性如下所示:
例如在目录下有如下build.xml文件,可以执行cmd命令,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="e" > <target name="e"> <exec executable="cmd"/> </target> </project>
运行结果如下所示:
mkdir:该任务的含义是用于创建文件夹。
mkdir任务的属性只有一个dir,而且该属性是必须的,如下所示:
例如在目录下有如下build.xml文件,该构件文件可以建立两个文件夹,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="m" > <target name="m"> <mkdir dir="folder1"/> <mkdir dir="folder2"/> </target> </project>
该构件文件的运行结果如下所示:
move:该任务的含义是用来移动文件和目录,也可以用于重命名,只要移动同一个目录下,并指定相同的目录名就行了。
move的属性如下所示:
例如在目录下有如下build.xml文件,将xx.zip文件和ant.xml文件分别移动到folder文件夹,如下所示;
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="mo" > <target name="mo"> <mkdir dir="folder"/> <move file="xx.zip" todir="folder"/> <move file="ant.xml" tofile="folder/moveant.xml"/> </target> </project>
结果如下所示:
javadoc:该任务的含义是生成javadoc文档,在最新的ant1.8.4中,有javadoc2这个任务和javadoc使用是一样的。
javadoc任务的部分属性如下:
replace:该任务的含义是用于执行文件中的查找和替换操作,其中token是要查找并替换的字符串,value是要替换的值。
replace任务的属性如下所示:
例如替换11.xml文件中target字符串为name:
<replace file="11.xml" token="target" value="name"/>
tstamp:该任务的含义是生成时间戳。
该任务可以以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这是经常可取的,它是根据当前的系统的时间和日期设置的。
tstamp任务的属性如下:
在用的时候经常搭配几个时间的量,可以通过${DSTAMP}的方式去使用它,如下所示:
DSTAMP:设置为当前日期,默认格式是yyyymmdd,如20101010;
TSTAMP:设置为当前时间,默认格式是hhmm1603,如2014;
TODAY:设置为当前日期,带完整的月份,如2012年10月12日。
例如在目录下有如下build.xml文件,在生成jar文件的同时,在其名字上加上生成的日期,如下所示:
<?xml version="1.0" encoding="UTF-8"?> <project name="FirstAnt" basedir="." default="ts" > <target name="ts"> <tstamp/> <mkdir dir="jar"/> <jar destfile="jar/long-${DSTAMP}.jar" basedir="."/> </target> </project>
运行的结果如下所示:
从图中可以看到jar包的名已经加上生成的日期了。
zip:该任务的含义是用于创建一个zip文件。
Zip任务的部分属性如下所示:
例如:将当前的目录下的所有文件压缩成zip,如下所示:
<zip destfile="manual.zip"basedir="."/>
unzip:该任务的含义是用于解压一个zip文件。
unzip任务的属性如下所示:
例如解压zip文件到当前的文件夹:
<unzip src="tools-src.zip" dest="."/>
cvs:该任务的含义是用于执行CVS命令。
cvs任务的属性如下所示:
由于现在对于cvs并不熟悉,带熟悉之后再进行使用。
war:该任务的含义是用于创建一个war文件。同理unwar就是解压war文件的。
war任务的部分属性如下所示:
到这里ant的一些常用的核心任务的基本用法就结束了,我个人认为这些应该够目前的使用了,日后如果对ant有了什么新的了解还会写博客分享的。