您的位置:首页 > 其它

自动构建工具Ant的使用(四)

2012-10-13 08:23 633 查看
       写到有关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有了什么新的了解还会写博客分享的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: