`
g21121
  • 浏览: 685869 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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的使用!

2
1
分享到:
评论
2 楼 g21121 2013-07-31  
Will_Turner 写道
<property name="lib" value="${WebRoot}/${WebInf}/lib" /> 
<property name="classes" value="${WebRoot}/${WebInf}/classes" />

这两个都多了${WebRoot}/,路径不对了。

ok
1 楼 Will_Turner 2013-07-31  
<property name="lib" value="${WebRoot}/${WebInf}/lib" /> 
<property name="classes" value="${WebRoot}/${WebInf}/classes" />

这两个都多了${WebRoot}/,路径不对了。

相关推荐

    ant入门教程-通俗易懂

    ant的简单入门教程 1、ant介绍;2、ant安装;3、第一个ant脚本;4、整合ant;5、ant进阶;6、常用task;7、控制流程;8、实例分析;9、如何继续学习;10、ant使用cvs实例;11、Q&A

    ant1.9资源

    读者分析结果后可以看到,我们运行的是名为targetB的target,因该target依赖于targetA,所以targetA将首先被执行,同时因为系统安装了java环境,所以ant.java.version属性存在,执行了targetA这个target,输出信息:...

    ant中文手册

    目录: 1. Ant介绍... 2. Ant 安装... 3. 第一个Ant脚本... 4. 整合ant 5. Ant进阶... 6. Ant常用task. 7. 在ant中控制流程(if else ) 8. 实例分析: 9. 如何继续学习...

    vue-antdesign-admin-template:Ant Design Pro Vue模板

    预览:|优化:项目结构和文件夹命名,项目结构更加合理优化:只保留基础的实例路由和页面,删除了其他页面优化:顶部multiTab的样式,可跟随header固定优化: 升级为最新的2.x优化:打包配置,可根据不同打包环境...

    Eclipse+Web开发从入门到精通(实例版)

    第4 章 在 Eclipse 中进行资源构建 ——Ant 使用实例... 60 4.1 Ant 简介... 60 4.1.1 构造文件的主要标记... 60 4.1.2 Ant 的常用任务(Task)... 62 4.2 Eclipse 与Ant 的集成... 64 4.2.1 创建Ant...

    Android中常用的XML生成方法实例分析

    本文实例讲述了Android中常用的XML生成方法。分享给大家供大家参考。具体如下: 1. java代码: package com.android.antking.xml; import java.io.OutputStream; import java.util.List; import org.xmlpull.v1....

    php中get_defined_constants函数用法实例分析

    具体分析如下: get_defined_constants ( PHP 4中 &gt; = 4.1.0 , PHP 5中) get_defined_constants -返回一个关联数组的名字所有的常量和他们的价值观 描述 阵列get_defined_constants ( [布尔$归类] ) 返回名称和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    在知识的讲解上,本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。.. 本书语言生动、通俗易懂、讲解细致,大部分章节都提供了多个例子,而且很...

    iuhyiuhkjh908u0980

    ant配置文件实例详解 build.xml 代码 xml version="1.0" encoding="UTF-8"?&gt; &lt;!-- name:对应工程的名字;default:需要的缺省任务(运行"ant"不指明任务时执行的任务) --&gt; by duzn 2007-04-02 回复 (0) Antenna与j2me...

    Java语言基础下载

    实例分析 110 抽象类,接口 115 内容总结 120 独立实践 121 第八章:异常 122 学习目标 122 异常的概念 123 异常的分类 123 实例分析 124 自定义异常 126 方法覆盖和异常 127 内容总结 129 第九章:基于文本的应用 ...

    论文研究-基于改进蚁群算法的乒乓球数据挖掘研究.pdf

    在Ant-Miner算法框架中通过对信息素更新和路径选择概率等策略的改进,并结合乒乓球技战术分析的特点,建立了基于改进蚁群算法的乒乓球技战术分类挖掘模型,并进行了实例分析,与乒乓球技战术关联规则挖掘相比较,该...

    J2EE架构设计PPT

    分析多层结构优点 具体讲解每个层次的实现技巧 第二部分:介绍组织层次关联利器(Spring) 快速入门 Factory模式 IOC模式 AOP模式 演练Spring的威力 第三部分:介绍日志管理利器(Log4j) 快速入门 演练Log4j的优越...

    Vue实现table上下移动功能示例

    主要介绍了Vue实现table上下移动功能,结合实例形式分析了vue.js针对table表格元素动态操作相关实现技巧,需要的朋友可以参考下

    java生成海报实例源码-hydiff:海迪夫

    java生成海报实例源码 HyDiff:混合差分软件分析 该存储库为ICSE'2020技术轨道接受的论文HyDiff:混合差分软件分析提供了工具和评估主题。 可以提供该论文的预印本。 作者: 、 、 、 、 和 。 存储库包括: 一个...

    Junit单元测试覆盖率分析

    我们将会使用ant来编译一个junit单元测试实例项目,然后修改build.xml文件,加上clover的覆盖率分析任务target;而且我们还要通过三部分来学习clover超级无敌的地方:current报告、历史报告以及高级特征

    论文研究-无线传感器网络多级环形分簇节能路由.pdf

    同时以美国自然科学基金网NSFNET、中国教育和科研计算机网CERNET1和CERNET2以及欧洲巨人网GéANT等的骨干网拓扑为仿真用实例,与现有启发式算法进行性能比较,并对网络参数对算法的影响进行了分析。实验表明,提出的...

    DRNG-Benchmark:确定性随机数生成器基准

    本文探讨了生成随机数的各种方法,并分析了应用程序的性能要求,以查看在实践中是否可以丢弃不安全的DRNG。 测试将在微型Amazon Web Services实例上进行,以提供可重复的结果。 测试的算法列表 安全的 / dev /随机...

Global site tag (gtag.js) - Google Analytics