ant是项目构建工具,以xml文件作为构建文件,在这个xml文件(默认是build.xml,当然也可以取其它名字)里我们可以定义多个目标,用我们期待的方式去构建项目,比如说编译,测试,发邮件等等。
ant有一个最大的特点的就是比较随意,比如说我只想编译,那你在xml文件中只包含编译这一个目标就行,如果你只想发邮件,那么你就直接在xml文件中设置发邮件这一项即可。如果你想完成一系列的动作,当然,那也行,你设置多个目标就ok了。
当有多个目标时,我们可以定义某个目标所要依赖的目标。这样当要执行某一个目标的时候,ant会优先执行这个目标所依赖的目标。
举例:我希望ant能以实现一系列动作:清除-编译-运行junit-生成html报告-邮件发送html报告
build.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="AntDemo" default="mail" basedir=".">
<property name="buildnum" value="" />
<property name="source.dir" value="src" />
<property name="bin.dir" value="bin" />
<property name="lib.dir" value="libs">
</property>
<property name="classes.dir" value="${bin.dir}" />
<property name="report.dir" value="report${buildnum}" />
这一部分是指出项目的名称AntDemo;定义某些属性,方便以后调用,比如下次你要调用bin这个目录,那么你就使用${bin.dir}就ok了
<target name="clean">
<delete>
<fileset dir="${classes.dir}" includes="**/*.class" />
</delete>
<delete dir="${classes.dir}" />
<mkdir dir="${classes.dir}" />
<mkdir dir="${report.dir}" />
</target>
这一部分是把bin目录下的文件清除,并且新建两个目录bin和report
<target name="compile" depends="clean">
<!-- local project jars -->
<patternset id="lib.includes.compile">
<include name="*.jar" />
</patternset>
<fileset dir="${lib.dir}" id="lib.compile">
<patternset refid="lib.includes.compile" />
</fileset>
<pathconvert targetos="windows" property="libs.compile" refid="lib.compile" />
<!-- compile -->
<javac srcdir="${source.dir}" destdir="${classes.dir}" classpath="${libs.compile}" includeantruntime="no" includes="**/*.java" debug="true" encoding="UTF-8">
</javac>
</target>
编译,依赖于clean
<target name="run" depends="compile">
<junit printsummary="yes" fork="true" haltonfailure="no" showoutput="true">
<classpath>
<pathelement location="${classes.dir}" />
<fileset dir="${lib.dir}" casesensitive="yes">
<include name="**/*.jar" />
</fileset>
</classpath>
<formatter type="plain" usefile="false" />
<formatter type="xml" />
<sysproperty key="file.encoding" value="UTF-8" />
<batchtest todir="${report.dir}">
<fileset dir="${classes.dir}">
<include name="test/*.*" />
<exclude name="test/TryTest.*" />
</fileset>
</batchtest>
</junit>
</target>
这一部分主要是调用junit,并且生成xml格式的测试输出文件。这一部分依赖于compile。
batchtest是使用带有通配符的文件集来查找测试类,来进行批处理测试。include是要被执行的测试类,exclude是要被跳过的测试类。
<target name="report" depends="run">
<junitreport todir="${report.dir}">
<fileset dir="${report.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="noframes" todir="${report.dir}" />
</junitreport>
<echo message="Finished running tests." />
</target>
<junitreport>标签使用XSTL将XML文件转换成HTML文件。
<include>设置搜寻TEST-*.xml文件,将至转换为HTML文件。
以上一段的作用就是整合report下面的Test-*.xml文件,并且生成无帧的html文件(有两种报告形式:帧frames和无帧moframes。如果报表生成帧配置,为每个类和主报告生成多个文件,将他们连接到通过链接。一个无帧报告由一个单一的文件执行测试的所有结果,无帧的方便些,建议使用). 这一部分依赖于run
<target name="mail" depends="report">
<tstamp />
<mimemail messageMimeType="text/html" messageFile="report/junit-noframes.html" mailhost="mail.xxx.com" user="xxx.com\qa-pub" password="password" mailport="25" subject="antDemo">
<from address="qa-pub@xxx.com" />
<to address="qiuwy@xxx.com" />
</mimemail>
</target>
</project>
把report目录下的junit-noframes.html当做邮件的内容发给收件者。这一部分依赖于report。
html报告格式如下: