经过大约一个星期的不懈努力,基本掌握了Ant较为常用的知识点,在此附上在学习过程中所编写的Ant配置文件的标准模板,拿来与喜欢使用Ant的朋友分享(注:“########”之后的部分是有关Ant的常用task的测试代码)。
<?xml version="1.0" encoding="UTF-8"?>
<project name="AutoLogin" default="compile">
<property name="webapp.name" value="AutoLogin" />
<!-- tomcat的安装路径-->
<property name="catalina.home" value="D:\Downloads\Tomcat6.0\apache-tomcat-6.0.18" />
<!--src.dir :源文件路径 -->
<property name="src.dir" value="src" />
<!-- 编译所需要的jar包的存放目录-->
<property name="lib.dir" value="${basedir}/WEB-INF/lib" />
<!--build.classes:class 文件 存放目录 -->
<property name="class.dir" value="${basedir}/WEB-INF/classes" />
<!-- tomcat 的应用发布路径-->
<property name="webapps.dir" value="${catalina.home}/webapps" />
<!-- jsp 页面文件-->
<property name="ui.dir" value="jsp" />
<!-- doc.dir :API文档的存放目录 -->
<property name="docs.dir" value="docs/api" />
<!-- reports.dir :Junit测试报告的存放目录-->
<property name="reports.dir" value="reports" />
<!-- **********************************set classpath********************************** -->
<!-- 设置环境变量,把编译所需要的jar包引入-->
<path id="compile.classpath">
<fileset dir="${catalina.home}/lib">
<include name="*.jar" />
</fileset>
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<!-- **********************************init********************************** -->
<!-- 初始化,创建各种目录 -->
<target name="init">
<mkdir dir="${lib.dir}" />
<mkdir dir="${ui.dir}" />
<mkdir dir="${reports.dir}"/>
</target>
<!-- **********************************clean class********************************** -->
<!-- 清除 编译的文件 -->
<target name="clean" description="Delete old build and dist directories">
<delete dir="${class.dir}" includes="**/*.class" />
</target>
<!-- **********************************compile java********************************** -->
<!-- 编译java文件 -->
<target name="compile" description="Compile Java sources" depends="clean">
<mkdir dir="${class.dir}" />
<javac srcdir="${src.dir}" destdir="${class.dir}">
<classpath refid="compile.classpath" />
</javac>
<copy todir="${class.dir}">
<fileset dir="${src.dir}" excludes="**/*.java" />
</copy>
</target>
<!-- 打成jar包 -->
<target name="jar" depends="compile">
<jar destfile="${src.dir}/project.jar" basedir="${class.dir}" excludes="**/*Test.class">
<manifest>
<!-- Who is building this jar -->
<attribute name="Build-By" value="${user.name}"/>
<!-- Information about project itself -->
<attribute name="Implementation-Vendor" value="XingShi inc."/>
<attribute name="Implementation-Title" value="GreatProduct"/>
<attribute name="Implementation-Version" value="1.0.0bata2"/>
<!-- details -->
<!--
<section name="...">
<attribute name="Sealed" value="false"/>
</section>
-->
</manifest>
</jar>
</target>
<!-- **********************************generate javadoc********************************** -->
<!-- 生成API文档 -->
<target name="doch" description="Product api docs">
<mkdir dir="${docs.dir}"/>
<javadoc charset="gb2312" encoding="gb2312" destdir="docs/api" author="true" version="true"
use="true" windowtitle="AutoLogin application api" classpathref="compile.classpath">
<fileset dir="${src.dir}" defaultexcludes="yes">
<include name="com/xingbang/servlet/**"/>
<exclude name="com/xingbang/test/**"/>
</fileset>
<!-- Another alternative
<packageset dir="${src.dir}" defaultexcludes="yes">
<include name="com/xingbang/servlet/**"/>
<exclude name="com/xingbang/test/**"/>
</packageset>
-->
<doctitle><![CDATA[<h1>AutoLogin</h1>]]></doctitle>
<bottom><![CDATA[<i>Copyright © 2010 XingShi Corp. All Rights Reserved.</i>]]></bottom>
<tag name="todo" scope="all" description="To do:"/>
<group title="Responsibles for main logic" packages="com.xingbang.servlet.a*" />
<group title="Some useful listener" packages="com.xingbang.servlet.l*" />
</javadoc>
</target>
<!-- **************************Executes the specified java file************************** -->
<!-- 执行指定的java文件 -->
<target name="Main-class" depends="compile">
<java classname="com.xingbang.servlet.autologin.MainExe" classpath="${class.dir}"
classpathref="compile.classpath" />
</target>
<!-- **************************junit test************************** -->
<!-- Junit单元测试 -->
<target name="junitrun" depends="init,compile" description="Run junit teset">
<!-- Delete 'old' junit test reports -->
<delete includeemptydirs="true">
<fileset dir="${reports.dir}" includes="**/*" />
</delete>
<junit printsummary="yes" haltonfailure="yes" failureproperty="functional.tests.failed">
<classpath>
<pathelement path="${class.dir}"/>
<path refid="compile.classpath" />
</classpath>
<formatter type="plain"/>
<test name="com.xingbang.junit.examples.CalculatorTest" haltonfailure="no" outfile="${reports.dir}/result">
<formatter type="xml"/>
</test>
<batchtest fork="true" todir="${reports.dir}">
<fileset dir="${src.dir}">
<include name="com/xingbang/junit/**/*Test*.java"/>
<exclude name="com/xingbang/junit/**/TestAll*.java"/>
</fileset>
</batchtest>
</junit>
<fail if="functional.tests.failed" message="One or more tests failed. See test output for details"/>
</target>
<!-- **********************************deploy webapp********************************** -->
<!-- 部署到tomcat-->
<target name="deploy" description="Install application to servlet container" depends="compile">
<delete dir="${webapps.dir}/${webapp.name}" />
<war destfile="${webapps.dir}/${webapp.name}.war" webxml="${basedir}/WEB-INF/web.xml">
<fileset dir="${ui.dir}" />
<lib dir="${lib.dir}" />
<classes dir="${class.dir}" />
</war>
</target>
<!-- **********************************start web server********************************** -->
<!-- 启动tomcat -->
<target name="startserver" description="Start web server">
<exec dir="${catalina.home}/bin" executable="cmd.exe">
<env key="CATALINA_HOME" path="${catalina.home}" />
<arg value="/c startup.bat" />
</exec>
</target>
<!-- **********************************stop web server********************************** -->
<!-- 停止tomcat-->
<target name="stopserver" description="Stop web server">
<exec dir="${catalina.home}/bin" executable="cmd.exe">
<env key="CATALINA_HOME" path="${catalina.home}" />
<arg value="/c shutdown.bat" />
</exec>
</target>
<!-- **********************************start work********************************** -->
<target name="start" description="Clean build and dist directories, then compile">
<ant target="deploy" />
<ant target="startserver" />
</target>
<!-- **********************************reload web server********************************** -->
<!-- 重启tomcat -->
<target name="reload" description="reload web server">
<ant target="stopserver">
</ant>
<sleep seconds="2">
</sleep>
<ant target="start">
</ant>
</target>
<!-- ********************************delete deployment*********************************** -->
<!-- 删除部署 -->
<target name="undeploy" description="delete deployment">
<delete dir="${webapps.dir}/${webapp.name}" />
<delete file="${webapps.dir}/${webapp.name}.war" />
</target>
<!-- ######################Tests of common tasks######################### -->
<!-- 测试delete task(不删除build/folder文件目录自身) -->
<target name="delete" description="Delete the specified directory.">
<delete includeemptydirs="true">
<fileset dir="build/folder" includes="**/*" />
</delete>
</target>
<!-- 测试available task && echo task && fail task -->
<target name="available" description="Test the usage of available task">
<echo level="info" message="Usage of available task." />
<available file="${src.dir}/log4j.properties" property="hasExists" />
<fail unless="hasExists" message="log4j.properties does't exist."/>
<!--
<fail if="hasExists" message="log4j.properties does exist."/>
-->
</target>
<!-- 测试copy task -->
<target name="copyer" description="Test the usage of copy task">
<copy todir="build/folder">
<fileset dir="reports" excludes="**/*.xml : **/*result.txt" />
</copy>
</target>
<!-- 测试move task -->
<target name="mover" description="Test the usage of move task">
<move todir="build/new">
<!-- <fileset dir="build/folder" includes="**/*" /> -->
<filelist dir="build/folder">
<file name="TEST-com.xingbang.junit.examples.ParameterTest.txt"/>
<file name="TEST-com.xingbang.junit.examples.PrivateMethodAccessTest.txt"/>
</filelist>
</move>
</target>
<!-- 测试replace task -->
<target name="replacer" description="Test tje usage of replace task">
<replace file="${src.dir}/dir.txt" token="目录" value="Directory" />
</target>
<!-- 测试core selector types -->
<target name="selector" depends="delete" description="Test the usage of selector types">
<copy todir="build/folder">
<fileset dir="reports" includes="**/*.txt : **/*.xml">
<!-- Contains selector
<contains text="standard output" casesensitive="false"/>
-->
<!-- Date selector -->
<date datetime="03/06/2010 06:00 PM" when="after"/>
<!-- Filename selector
<filename name="**/*.xml"/>
-->
<!-- Size selector
<patternset>
<include name="**/*.txt : **/*.xml"/>
</patternset>
-->
<!-- Select all TXT or XML files that are larger than 4096 bytes -->
<!-- <size value="4" units="Ki" when="more"/> -->
<!-- Type selector
<type type="file"/>
-->
</fileset>
</copy>
</target>
</project>