1、ant安装
从官网下载
二进制文件>>解压到 某目录>>设置系统变量ANT_HOME>>设置PATH环境变量bin>>DOS中测试ant命令
2、ant build.xml文件
<?xml version="1.0" encoding="GB2312" ?>
<project name=" projectname" default="war" basedir=".">
<!--
===================================================================
定义属性(property tasks)
最好把用到的路径呀,名称呀都在这里定义成全局变量
===================================================================
-->
<!--主要的 系统环境属性-->
<property environment=" env" /><!--取window,unix...的环境变量-->
<property name=" java.home" value="${env.JAVA_HOME}" />
<!--主要的 app环境属性-->
<property name="app.name" value=" yourappname" />
<property name="app.jar" value="${app.name}.jar" />
<property name="app.war" value="${app.name}.war" />
<property name="app.copyright"
value=" Copyright (c) 2010 GLOBAL-SAFETY Software Foundation. All rights reserved." />
<!--app中 src的属性-->
<property name="src.dir" value="src" />
<property name="classSavePath" value="web/WEB-INF/classes" />
<!--app用到的 lib-->
<property name="lib.dir" value="web/WEB-INF/lib" />
<!--app的 build目录中-->
<property name="build.dir" value=" ./output" />
<property name="build.classes" value="${build.dir}/classes" />
<property name="build.lib" value="web/WEB-INF/lib" />
<property name="war.dir" value="${build.dir}/war" />
<property name="warsource.dir" value="web" />
<!--
定义一组路径以后可以通过id重用这组路径
<?xml version="1.0" encoding="GB2312" ?>
<project name=" projectname" default="war" basedir=".">
<!--
===================================================================
定义属性(property tasks)
最好把用到的路径呀,名称呀都在这里定义成全局变量
===================================================================
-->
<!--主要的 系统环境属性-->
<property environment=" env" /><!--取window,unix...的环境变量-->
<property name=" java.home" value="${env.JAVA_HOME}" />
<!--主要的 app环境属性-->
<property name="app.name" value=" yourappname" />
<property name="app.jar" value="${app.name}.jar" />
<property name="app.war" value="${app.name}.war" />
<property name="app.copyright"
value=" Copyright (c) 2010 GLOBAL-SAFETY Software Foundation. All rights reserved." />
<!--app中 src的属性-->
<property name="src.dir" value="src" />
<property name="classSavePath" value="web/WEB-INF/classes" />
<!--app用到的 lib-->
<property name="lib.dir" value="web/WEB-INF/lib" />
<!--app的 build目录中-->
<property name="build.dir" value=" ./output" />
<property name="build.classes" value="${build.dir}/classes" />
<property name="build.lib" value="web/WEB-INF/lib" />
<property name="war.dir" value="${build.dir}/war" />
<property name="warsource.dir" value="web" />
<!--
定义一组路径以后可以通过id重用这组路径
-->
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
<include name="*.zip" />
</fileset>
<fileset dir="${java.home}/lib">
<include name="**/*.jar" />
<include name="*.zip" />
</fileset>
</path>
<!--
===================================================================
init 准备目录(File Tasks)
主要的目录结构通常是不会变的,一起生成他们
===================================================================
-->
<target name="init">
<echo message="环境信息:" />
<echo message="JAVA_HOME:${java.home}" />
<!-- 清除以前目录-->
<delete dir="${build.dir}" failοnerrοr="false" />
<delete dir="${classSavePath}" failοnerrοr="false" />
<!-- 准备目录-->
<mkdir dir="${build.dir}" />
<mkdir dir="${classSavePath}" />
</target>
<!--
===================================================================
Build the code (Compile Tasks,File Tasks)
===================================================================
-->
<target name="build" depends="init">
<!--编译-->
<javac srcdir="${src.dir}" destdir="${classSavePath}"
encoding="UTF-8" fork="true" memoryMaximumSize="1024m">
<classpath refid="classpath" />
</javac>
<copy todir="${classSavePath}" includeemptydirs="false">
< fileset dir="${src.dir}">
<include name="**/ *.properties" />
<include name="* */*.xml" />
<include name="**/ *.xsl" />
</fileset>
</copy>
</target>
<!--
===================================================================
打war包
===================================================================
-->
<target name="war" depends="build" description="生成war包">
<echo message="正在打war包,请稍候..." />
<war destfile="${build.dir}/${app.war}" encoding="gb2312"
webxml="${warsource.dir}/WEB-INF/web.xml">
<fileset dir="${warsource.dir}">
<exclude name="build.xml" />
<exclude name="**/web.xml" />
</fileset>
</war>
<echo message="打war包结束" />
</target>
<!--
===================================================================
快速(依靠原工程编译文件)打war包
===================================================================
-->
<target name="quick-war" depends="" description="生成war包">
<echo message="非重新build打war包(请保证您的工程$/web/WEB-INF/classes已有下编译类),请稍候..." />
<war destfile="${build.dir}/${app.war}" encoding="gb2312"
webxml="${warsource.dir}/WEB-INF/web.xml">
<fileset dir="${warsource.dir}">
<exclude name="build.xml" />
<exclude name="**/web.xml" />
</fileset>
</war>
<echo message="打war包结束" />
</target>
</project>
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
<include name="*.zip" />
</fileset>
<fileset dir="${java.home}/lib">
<include name="**/*.jar" />
<include name="*.zip" />
</fileset>
</path>
<!--
===================================================================
init 准备目录(File Tasks)
主要的目录结构通常是不会变的,一起生成他们
===================================================================
-->
<target name="init">
<echo message="环境信息:" />
<echo message="JAVA_HOME:${java.home}" />
<!-- 清除以前目录-->
<delete dir="${build.dir}" failοnerrοr="false" />
<delete dir="${classSavePath}" failοnerrοr="false" />
<!-- 准备目录-->
<mkdir dir="${build.dir}" />
<mkdir dir="${classSavePath}" />
</target>
<!--
===================================================================
Build the code (Compile Tasks,File Tasks)
===================================================================
-->
<target name="build" depends="init">
<!--编译-->
<javac srcdir="${src.dir}" destdir="${classSavePath}"
encoding="UTF-8" fork="true" memoryMaximumSize="1024m">
<classpath refid="classpath" />
</javac>
<copy todir="${classSavePath}" includeemptydirs="false">
< fileset dir="${src.dir}">
<include name="**/ *.properties" />
<include name="* */*.xml" />
<include name="**/ *.xsl" />
</fileset>
</copy>
</target>
<!--
===================================================================
打war包
===================================================================
-->
<target name="war" depends="build" description="生成war包">
<echo message="正在打war包,请稍候..." />
<war destfile="${build.dir}/${app.war}" encoding="gb2312"
webxml="${warsource.dir}/WEB-INF/web.xml">
<fileset dir="${warsource.dir}">
<exclude name="build.xml" />
<exclude name="**/web.xml" />
</fileset>
</war>
<echo message="打war包结束" />
</target>
<!--
===================================================================
快速(依靠原工程编译文件)打war包
===================================================================
-->
<target name="quick-war" depends="" description="生成war包">
<echo message="非重新build打war包(请保证您的工程$/web/WEB-INF/classes已有下编译类),请稍候..." />
<war destfile="${build.dir}/${app.war}" encoding="gb2312"
webxml="${warsource.dir}/WEB-INF/web.xml">
<fileset dir="${warsource.dir}">
<exclude name="build.xml" />
<exclude name="**/web.xml" />
</fileset>
</war>
<echo message="打war包结束" />
</target>
</project>
3、
ant优点
- 功能强大。从编译java文件到checkin cvs,反正几乎你想得到的功能它都能作。
- 扩展容易,如果你发现某个功能ant没有,自己实现一个Task类就是。
- 一些功能设计得很合理。比如javac和java自动检查时间戳和依赖关系检查等等。
4、
ant缺点
- 而xml的语法有些时候显得很繁琐,xml用来描述逻辑异常笨拙。
- 所有的逻辑都只能在java里用Task实现。要做一些跨越不同Task之间的通讯很困难。比如:先读取第一个文件的时间戳,再读取另一个文件中储存的时间戳,再根据两个时间戳之间的距离判断下一步调用哪个task或者target。
- xml的代码重用困难。很难定义一些常用的xml element作为库,然后再不同文件甚至项目中重用。
- 对module的支持有限。
5、基于脚本语言的
build tools
- maven:
- 用ruby写的buildr、raven
buildr支持
1、可以读取Maven的pom.xml构建文件,创建Buildr的构建文件
2、支持ANTLR解析器
3、支持Hibernate XDoclet和Schema任务
4、支持JUnit/TestNG测试框架
5、支持所有Ant的任务,只要你会用ant,你就会用buildr