4 Ant的Core Tasks
4.1 File(Directory)类
4.1.1 Mkdir
创建一个目录,如果他的父目录不存在,也会被同时创建。
例子:
<mkdir dir="build/classes"/>
说明:如果build不存在,也会被同时创建
4.1.2 Copy
拷贝一个(组)文件、目录
例子:
1.拷贝单个的文件:
<copy file="myfile.txt" tofile="mycopy.txt"/>
2.拷贝单个的文件到指定目录下
<copy file="myfile.txt" todir="../some/other/dir"/>
3.拷贝一个目录到另外一个目录下
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
4.拷贝一批文件到指定目录下
<copy todir="../dest/dir">
<fileset dir="src_dir">
<include name="**Test.java"/>
</fileset>
</copy>
<copy todir="../dest/dir">
<fileset dir="src_dir" excludes="***.bak"/>
</delete>
4.1.3 删除指定目录及其子目录,包括他自己
<delete includeEmptyDirs="true">
<fileset dir="build"/>
</delete>
4.1.4 Move
移动或重命名一个(组)文件、目录
例子:
1.移动或重命名一个文件
<move file="file.orig" tofile="file.moved"/>
2.移动或重命名一个文件到另一个文件夹下面
<move file="file.orig" todir="dir/to/move/to"/>
3.将一个目录移到另外一个目录下
<move todir="new/dir/to/move/to">
<fileset dir="src/dir"/>
</move>
4.将一组文件移动到另外的目录下
<move todir="some/new/dir">
<fileset dir="my/src/dir">
<include name="**ant.jar"/>
</fileset>
</move>
5.移动文件过程中增加。Bak后缀
<move todir="my/src/dir">
<fileset dir="my/src/dir">
<exclude name="**Test.class" />
将{build}/classes下面的所有文件打包到{dist}/lib/app.jar中,但是包括mypackage/test/所有文件不包括所有的Test.class
3.<jar destfile="{dist}/lib/app.jar"
basedir="{build}/classes"
includes="mypackage/testTest.class"
manifest="my.mf"/>
manifest属性指定自己的META-INF/MANIFEST.MF文件,而不是由系统生成
4.3.2 war
对Jar的扩展,用于打包Web应用
例子:
假设我们的文件目录如下:
thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif
下面是我们的任务的内容:
<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
<fileset dir="src/html/myapp"/>
<fileset dir="src/jsp/myapp"/>
<lib dir="thirdparty/libs">
<exclude name="jdbc1.jar"/>
</lib>
<classes dir="build/main"/>
<zipfileset dir="src/graphics/images/gifs"
prefix="images"/>
</war>
完成后的结果:
WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif
4.3.3 ear
用于打包企业应用
例子
<ear destfile="{build.dir}/myapp.ear" appxml="{src.dir}/metadata/application.xml">
<fileset dir="{build.dir}" includes="*.jar,*.war"/>
</ear>
4.4 时间戳
在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。
这可能涉及编辑一个文件,以便插入一个字符串来指定日期和时间,或将这个信息合并到 JAR 或 zip 文件的文件名中。
属性说明例子
DSTAMP 设置为当前日期,默认格式为yyyymmdd 20031217
TSTAMP 设置为当前时间,默认格式为 hhmm 1603
TODAY 设置为当前日期,带完整的月份2003 年 12 月 17 日
例如,在前一小节中,我们按如下方式创建了一个 JAR 文件:
<jar destfile="package.jar" basedir="classes"/>
在调用 tstamp 任务之后,我们能够根据日期命名该 JAR 文件,如下所示:
<jar destfile="package-{DSTAMP}.jar" basedir="classes"/>
因此,如果这个任务在 2003 年 12 月 17 日调用,该 JAR 文件将被命名为 package-20031217.jar。
还可以配置 tstamp 任务来设置不同的属性,应用一个当前时间之前或之后的时间偏移,或以不同的方式格式化该字符串。
所有这些都是使用一个嵌套的 format 元素来完成的,如下所示:
<tstamp>
<format property="OFFSET_TIME"
pattern="HH:mm:ss"
offset="10" unit="minute"/>
</tstamp>
上面的清单将 OFFSET_TIME 属性设置为距离当前时间 10 分钟之后的小时数、分钟数和秒数。
用于定义格式字符串的字符与 java.text.SimpleDateFormat 类所定义的那些格式字符相同
4.5 执行SQL语句
通过jdbc执行SQL语句
例子:
1.<sql
driver="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/mydb"
userid="root"
password="root"
src="data.sql"
/>
2.<sql
driver="org.database.jdbcDriver"
url="jdbc:database-url"
userid="sa"
password="pass"
src="data.sql"
rdbms="oracle"
version="8.1."
>
</sql>
只有在oracle、版本是8.1的时候才执行
4.6 发送邮件
使用SMTP服务器发送邮件
例子:
<mail mailhost="smtp.myisp.com" mailport="1025" subject="Test build">
<from address="me@myisp.com"/>
<to address="all@xyz.com"/>
<message>The {buildname} nightly build has completed</message>
<fileset dir="dist">
<includes name="**/*.zip"/>
</fileset>
</mail>
mailhost: SMTP服务器地址
mailport:服务器端口
subject:主题
from:发送人地址
to:接受人地址
message:发送的消息
fileset:设置附件
具体的例子:
<?xml version="1.0" encoding="utf-8"?>
<project name="autotest1" default="sendmail" basedir=".">
<!--配置基本属性-->
<property name="src" value="src" />
<property name="build" value="build" />
<property name="lib" value="lib" />
<property name="dist" value="dist" />
<property name="classpath" location="${build}" />
<!--配置测试报告的属性-->
<property name="report" value="report" />
<property name="report.xml" value="${report}/junit/xml" />
<property name="report.html" value="${report}/junit/html" />
<!--配置运行时classpath-->
<path id="classpath.run">
<pathelement path="${classpath}" />
<fileset dir="${lib}">
<include name="*.jar" />
</fileset>
</path>
<!--配置测试时classpath-->
<path id="classpath.test">
<path refid="classpath.run" />
<path location="${dist}/lib/test-${DSTAMP}.jar" />
</path>
<!--任务初始化-->
<target name="init">
<tstamp />
<delete dir="${build}" />
<delete dir="${report}" />
<delete dir="${dist}" />
<mkdir dir="${build}" />
</target>
<!--配置编译任务-->
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${build}" includeantruntime="on" encoding="utf-8" >
<classpath refid="classpath.run" />
</javac>
</target>
<!--配置运行任务-->
<target name="run" depends="compile">
<java classname="com.newcosoft.cmwh">
<classpath>
<path refid="classpath.run" />
</classpath>
</java>
</target>
<!--配置JUnit测试,打印测试结果-->
<target name="report" depends="compile">
<mkdir dir="${report.xml}" />
<mkdir dir="${report.html}" />
<junit printsummary="yes" haltonfailure="no">
<classpath refid="classpath.run" />
<formatter type="xml" />
<batchtest fork="yes" todir="${report.xml}">
<fileset dir="${src}" includes="**/*.java" />
</batchtest>
</junit>
<junitreport todir="${report.html}">
<fileset dir="${report.xml}">
<include name="*.xml" />
</fileset>
<report format="frames" todir="${report.html}" />
</junitreport>
</target>
<!--将生成的测试报告打成zip包 -->
<target name="mkzip" depends="report">
<tstamp>
<format property="DSTAMP" pattern="yyyyMMdd"/>
</tstamp>
<zip destfile="${report}/Testreport_${DSTAMP}.zip" basedir="${report}" excludes="*"></zip>
</target>
<!--将测试报告 打包,移动目录-->
<target name="move" depends="mkzip" >
<copy todir="E:\\SeleniumTestReport">
<fileset dir="${report}">
<include name="**/*.zip"/>
</fileset>
</copy>
</target>
<!--把测试报告附在邮件中发送出去-->
<target name="sendmail" description="testReport" depends="move">
<mail mailhost="mail.newcosoft.com" mailport="25" charset="utf-8" subject="Selenium Test Report" user="tester@soft.com" password="passwd">
<from address="tester@soft.com" name="tester" />
<to address="tyf@soft.com" name="tyf" />
<message>附件为自动化测试报告,如有问题,尽快与测试组联系! </message>
<attachments>
<fileset dir="${report}">
<include name="Testreport_${DSTAMP}.zip" />
</fileset>
</attachments>
</mail>
</target>
</project>