`
g21121
  • 浏览: 694681 次
  • 性别: 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}/,路径不对了。

相关推荐

    自定义AntTask简单实例

    本教程将通过一个简单的实例,讲解如何创建和使用自定义Ant Task。 首先,理解Ant Task的基本结构。一个自定义Task通常继承自`org.apache.tools.ant.Task`类,并重写`execute()`方法,这是Task执行时调用的核心方法...

    ant使用实例(TXT )

    ### 完整使用实例分析 #### 实例一:文件复制任务 本实例展示了如何使用Ant进行文件复制操作。 ##### 1. XML文件结构 ```xml &lt;!-- 定义属性 --&gt; ${dest_drive} &lt;!-- 创建目标目录 --&gt; ${dest_dir}"/&gt;...

    ant 开发及整合 源码 实例

    8. **源码分析**:通过提供的源码实例,你可以看到Ant如何在实际项目中应用,了解每个任务和目标的具体实现。 9. **实战演练**:按照压缩包中的chapter4到chapter13,逐步学习和实践每个章节提供的示例,这将有助于...

    ant 学习实例初学者福音

    Ant是Apache软件基金会的一个开放源代码项目,是一个Java构建...通过这些实例,初学者可以深入理解Ant的工作原理和用法,为后续的Java项目构建打下坚实基础。在实践中不断尝试和修改,将有助于更好地掌握Ant的精髓。

    Ant的配置及使用实例

    ### Ant的配置及使用实例 #### 一、Ant简介与安装配置 Apache Ant是一款Java平台下的构建工具,它使用XML来描述构建过程,并且能够跨平台运行。由于其灵活的特性,Ant被广泛应用于Java项目的编译、打包、部署等...

    ant 学习 笔记 一个简单的java 编译部署实例

    根据提供的文件信息,这里将深入解析“ant学习笔记:一个简单的java编译部署实例”,涵盖标题、描述、标签以及部分内容中提及的关键知识点。 ### Apache Ant简介 Apache Ant是一款开源的Java环境下的自动化构建...

    ant入门教程-通俗易懂

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

    Ant 入门资料(完整版)

    Ant是Apache软件基金会下的一个Java构建...总之,这个"Ant入门资料(完整版)"是一套全面的学习资源,涵盖了理论知识、实例演示和实践操作,旨在帮助初学者快速掌握Ant工具,从而在实际开发工作中发挥出它的强大效能。

    运动器材通信协议 ANT+各种协议

    ANT+是一种无线通信协议,主要用于健身和运动设备之间的数据交换,比如码表、心率带、...这种互操作性使得用户可以自由选择不同品牌和型号的设备,而不用担心数据交换的问题,极大地丰富了运动监测和数据分析的可能性。

    自动化测试系列一 ANT

    在这一系列的第一部分,我们将了解如何利用ANT进行自动化测试,并查看具体的ANT脚本实例。 【知识点详述】 1. **ANT简介**:ANT是一个基于Java的项目管理工具,它的设计目标是简化软件项目的构建过程,通过XML配置...

    jmeter+ant.zip

    总结来说,"jmeter+ant.zip"的组合提供了一个集成JMeter和Ant的实例,它展示了如何利用这两个工具进行性能测试的自动化,并且通过定制报告模板,增强了测试结果的可读性和分析能力。对于初学者,这是一个很好的学习...

    Ant In Action 第2版 源码

    源代码包"antbook-examples-2007-06-20"包含了书中各个章节的实例代码,这些例子涵盖了Ant的各个方面,如基本的编译任务、文件操作、类路径管理、JAR打包、JUnit测试集成、远程系统操作以及自定义任务的开发。...

    ant构件示例说明

    在描述中提到了一个博客链接,虽然具体内容没有提供,但可以推测该博客可能包含了一个或多个Ant构建文件的实例,用于解释如何配置和使用Ant进行项目构建。这个博客可能是博主分享的一个实战经验或者教程,可能涉及到...

    ant-antlr-1.6.5.jar.zip

    总的来说,"ant-antlr-1.6.5.jar.zip"这个压缩包是Ant和ANTLR结合的实例,为Java开发者提供了一个强大的工具链,用于自动化构建过程中的语法解析和代码生成。通过正确配置和使用这个扩展,开发者可以更加高效地管理...

    ant-antlr-1.6.3.jar.zip

    总的来说,“ant-antlr-1.6.3.jar.zip”是Ant与ANTLR结合的一个实例,它提供了在Ant构建流程中使用ANTLR的能力。开发者可以通过解压并引入这个库,实现更复杂的构建任务,如自定义语言的解析和处理。而“ant.license...

    ant1.9资源

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

    Ant基本使用指南--从入门到精通

    - `-listener class`:添加项目监听器实例。 - `-buildfile file`:指定 buildfile 的位置。 - `-find file`:在文件系统中查找 buildfile 并使用第一个找到的文件。 - `-Dproperty=value`:设置属性值。 #### 四、...

    ant-apache-log4j.jar.zip

    我们将详细分析其中的两个主要文件:"ant-apache-log4j.jar"和"ant.license.txt",并讨论它们在实际项目中的作用和重要性。 首先,让我们来了解一下Ant。Ant是Apache软件基金会的一个项目,它是一个Java语言编写的...

    error_prone_ant-1.1.0.zip

    Error Prone是静态分析的一个实例,它能帮助开发者在早期阶段就发现和修复问题,从而减少调试时间和维护成本。 4. **包装器布局**:在软件工程中,包装器类用于提供一个统一的接口,隐藏内部实现的复杂性。例如,它...

    自动化测试系列三 ANT

    **ANT脚本实例** 一个简单的ANT脚本可能包含以下元素: ```xml ${build.dir}/classes"/&gt; ${src.dir}" destdir="${build.dir}/classes"/&gt; ${test.src.dir}" destdir="${build.dir}/classes"/&gt; ...

Global site tag (gtag.js) - Google Analytics