Ant实例分析

        下面是一个Ant构建文件的实例,通过这个实例我们可以很清楚的理顺构建一个项目的顺序及依赖关系,从而编写出更加合理的构建文件。

 

        下面是build.xml的代码:

<?xml version="1.0" encoding="UTF-8"?>
<project name="example" basedir="." default="deploy">
	<!-- 引入外部的properties 文件 -->
	<property file="build.properties" />
	<!-- 定义项目名称 -->
	<property name="name" value="AntExample" />
	<!-- tomcat所在目录 -->
	<property name="tomcatHome" value="/usr/local/tomcat" />
	<!-- 应用服务器部署目录 -->
	<property name="webserver" value="${tomcatHome}/webapps" />
	<!-- 源代码目录 -->
	<property name="src" value="src" />
	<!-- 编译的目标路径 -->
	<property name="build" value="./build" />
	<property name="dest" value="./build/classes" />
	<!-- Junit report 目录 -->
	<property name="report" value="${build}/testReport" />
	<!-- WebRoot/WebRoot 相关目录 -->
	<property name="WebRoot" value="./WebRoot" />
	<property name="WebInf" value="${WebRoot}/WEB-INF" />
	<property name="lib" value="${WebInf}/lib" />
	<property name="classes" value="${WebInf}/classes" />
	<!-- 备份目录 -->
	<property name="backup" value="usr/local/backup/${backupTime}" />
	<!-- 获取当前时间 -->
	<tstamp>
		<format property="backupTime" pattern="yyyyMMddHHmm" locale="zh"/>
	</tstamp>
	<!-- sql文件 -->
	<property name="sqlFile" value="./sql/init.sql" />
	
	<!-- 定义classpath 路径,抽象定义,可以多处引用 -->
	<path id="classpath">
		<fileset dir="${lib}">
			<include name="**/*.jar" />
		</fileset>
		<pathelement location="${dest}" />
		<pathelement location="${classes}" />
	</path>
	
	<!-- 初始化:清理构建过的目录,创建新目录 -->
	<target name="init">
		<echo message="=============初始化创建编译目录=============" />
		<delete dir="${build}" />
		<mkdir dir="${build}" />
		<mkdir dir="${dest}" />
		<mkdir dir="${report}" />
		<!-- WebRoot 下的classes -->
		<delete dir="${classes}" />
		<mkdir dir="${classes}" />
	</target>
	
	<!-- 编译java 文件,编译到build/classes 下,再把build/classes 目录复制到WebRoot/WEB-INF/classes 下  -->
	<target name="compile" depends="init">
		<echo message="=============编译源代码=============" />
		<javac encoding="utf-8" srcdir="${src}" destdir="${dest}" includeantruntime="false" debug="on" deprecation="false" optimize="true" failonerror="true" source="1.6" target="1.6">
			<classpath refid="classpath" />
		</javac>
		<copy todir="${classes}">
			<fileset dir="${dest}">
				<exclude name="**/*Test*.*" />
			</fileset>
		</copy>
	</target>
	
	<!-- Junit 测试 -->
	<target name="test" depends="compile" description="run junit test">
		<echo message="=============Junit 测试=============" />
		<delete dir="${report}" />
		<mkdir dir="${report}" />
		<junit printsummary="on" haltonfailure="false" failureproperty="tests.failed" showoutput="true">
			<classpath refid="classpath" />
			<formatter type="plain" />
			<batchtest fork="yes" todir="${report}">
				<fileset dir="${dest}">
					<include name="**/*Test*.*" />
					<include name="**/*test*.*" />
				</fileset>
			</batchtest>
		</junit>
		<fail if="tests.failed" />
	</target>
	
	<!-- 编译war 包 -->
	<target name="war" depends="test" description="将工程打成war 包">
		<echo message="=============编译war 包=============" />
		<delete file="${build}/${name}.war" />
		<war warfile="${build}/${name}.war" webxml="${WebInf}/web.xml">
			<fileset dir="${WebRoot}" />
		</war>
	</target>
	
	<!-- 备份原版本war包 -->
	<target name="backupWar" depends="init,compile,test,war" description="备份原版本war包">
		<echo message="=============备份原版本war包=============" />
		<mkdir id="backupDir" dir="${backup}/${backupTime}/" description="按时间创建备份文件夹"/>
		<copy todir="${backupDir}" overwrite="true">
			<fileset file="${webserver}/${name}.war" />
		</copy>
	</target>
	
	<!-- 发布war 包的项目到web 容器下 -->
	<target name="deployWar" depends="backupWar" description="将工程打成war 包">
		<echo message="=============发布war 包的项目到Web 服务器=============" />
		<delete file="${webserver}/${name}.war" />
		<delete file="${webserver}/${name}" />
		<copy todir="${webserver}" overwrite="true">
			<fileset file="${build}/${name}.war" />
		</copy>
	</target>
	
	<!-- 清除 -->
	<target name="delete" description="删除服务器上的war">
		<delete dir="${dest}" />
		<delete dir="${report}" />
		<delete file="${build}/${name}.war" />
		<delete dir="${webserver}/${name}" />
		<delete file="${webserver}/${name}.war" />
	</target>
	
	<!-- 停止tomcat -->
	<target name="shutdownTomcat" depends="deployWar">
		<echo message="=============停止Tomcat=============" />
        <exec dir="${tomcatHome}/bin" executable="bash">
            <env key="CATALINA_HOME" path="${tomcatHome}"/>
            <arg value="shutdown.sh"/>
        </exec>
	</target>
	
	<!-- 启动tomcat -->
	<target name="startTomcat" depends="shutdownTomcat">
		<echo message="=============启动Tomcat=============" />
        <exec dir="${tomcatHome}/bin" executable="bash">
            <env key="CATALINA_HOME" path="${tomcatHome}"/>
            <arg value="startup.sh"/>
        </exec>
	</target>
	
	<!-- 发布程序 -->
	<target name="deploy" depends="startTomcat">
		<echo message="=============发布程序成功=============" />
	</target>
	
	<!-- 直接使用SQL 语句书此话数据库 -->
	<target name="initDB1">
		<sql driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" userid="root" password="test">
			<classpath refid="classpath" />
			CREATE TABLE `USER` (
			  `USR_ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
			  `NAME` varchar(20) DEFAULT NULL COMMENT '姓名',
			  `LOGIN_NAME` varchar(64) NOT NULL COMMENT '登录名',
			  `PASSWD` varchar(64) NOT NULL COMMENT '密码',
			  `STATUS` int(11) DEFAULT NULL COMMENT '用户状态',
			  `SAFE_QUESTION` int(11) DEFAULT NULL COMMENT '安全提示问题',
			  `SAFE_ANSWER` varchar(32) DEFAULT NULL COMMENT '安全提示答案',
			  `CREATE_DATE` datetime DEFAULT NULL COMMENT '创建日期',
			  `ACTIV_CODE` varchar(32) DEFAULT NULL COMMENT '激活码',
			  `USR_TYPE` int(11) DEFAULT NULL COMMENT '用户类型',
			  `MOBILE` int(15) DEFAULT NULL COMMENT '手机',
			  `QQ` int(15) DEFAULT NULL COMMENT 'QQ',
			  `ADDRESS` int(150) DEFAULT NULL COMMENT '联系地址',
			  `AGE` int(10) DEFAULT NULL COMMENT '年龄',
			  PRIMARY KEY (`USR_ID`)
			);
		</sql>
	</target>
	
	<!-- 使用.sql 脚本文件 初始化数据库 -->
	<target name="initDB2">
		<sql driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" userid="root" password="test" src="${sqlFile}">
			<classpath refid="classpath" />
		</sql>
	</target>
	
</project>

 

 

        我已经将解释以注释的形式写在源代码中了,如果看过前几篇Ant的文章的话,这个构建文件不难看懂,祝大家能够快速掌握Ant的使用!

你可能感兴趣的:(ant)