经过摸索,监控工具的开发过程实现了利用Ant来自动从CVS服务器checkout源码,然后编译,进行单元测试并生成测试报告,部署或者发布,最后邮件通知的流程现将Ant的实践总结跟贴于此
Ant的核心就在于它的Task,分为Core Task和Optional Task,通过这些Task,可以完成很多任务而不仅仅是建构另外,还可以自己编写扩展Task类实现特定的功能
使用Ant的Task时,需要注意的是很多Task需要相关的Jar包在环境变量classpath中,或者放在ANT_HOMEib下,这样可以省去设定classpath的麻烦比如发送MIME形式的Email的mail Task需要有mail.jar(JavaMail)和activation.jar(JavaMail需要的JAF)这些在ant的文档中都有说明
执行具体任务的例子:
Ant从CVS服务器checkout源码通过cvs任务实现:
<target name="checkout">
<mkdir dir="${localdir}"/>
<cvs cvsRoot="${cvsroot}" package="${module}" dest="${localdir}">
<commandline>
<argumentline="checkout"/>
</commandline>
</cvs>
</target>
编译是通过javac任务实现:
<target name="compile" depends="checkout">
<javac srcdir="${localdir}\${module}\src" destdir="${localdir}\${module}\bin" includes="**\*.java">
<classpath refid="classpath"/>
</javac>
</target>
编译好了之后还可以另行打包或者创建副本,可以通过copy和zip等任务
单元测试是利用junit,生成测试报告用junitreport:
<target name="junit" depends="dist">
<junit printsummary="on">
<classpath>
<pathelement location="${localdir}\${module}\bin"/>
</classpath>
<formatter type="xml"/>
<batchtest>
<fileset dir="${localdir}\${module}\bin">
<include name="**\*Test.class"/>
</fileset>
</batchtest>
</junit>
<junitreport>
<fileset dir=".">
<include name="TEST-*.xml"/>
</fileset>
<report format="noframes"/>
</junitreport>
</target>
单元测试都无误后,就可以通过上传至ftp:
<target name="publish" depends="junit">
<property name="ftpserver" value="xxx"/>
<property name="ftpdir" value="/Monitor"/>
<ftp server="${ftpserver}" userid="anonymous" password="@" remotedir="${ftpdir}">
<fileset dir="${distdir}">
<include name="${dist.zip}"/>
</fileset>
</ftp>
</target>
这里要说明的是,<ftp>任务中有个属性action,用于指明操作命令(包括"put", "get", "del", "list", "chmod", "mkdir","rmdir")当然,还需要有相应的权限
之后就可以邮件通知了可以将单元测试报告一并发送:
<target name="mail" depends="publish">
<tstamp>
<format property="TODAY" pattern="yyyy-MM-dd"/>
<format property="TSTAMP" pattern="hh:mm:ss"/>
</tstamp>
<property name="mailto" value="[email protected], [email protected] "/>
<property name="mailfrom" value="[email protected]"/>
<mail from="${mailfrom}" tolist="${mailto}" mailhost="mail.gmail.com"
subject="xxxx"
messagefile="junit-noframes.html" messagemimetype="text/html">
<fileset dir=".">
<include name="TEST-*.xml"/>
</fileset>
</mail>
</target>
上面,<tstamp/>用来得到时间戳,并利用<format/>来对日期和时间格式化,ant的这个功能很实用
Ant的Task还有很多,有待进一步挖掘不过对于自动的编译测试等流程,上面这些任务应该就够了