Ant的优势 Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有如下的优势。跨平台性。Ant是存Java语言编写的,所示具备很好的跨平台性。操做简单。Ant是由一个内置任务和可选任务组成的。Ant运行时须要一个XML文件(构建文件)。Ant经过调用target树,就能够执行各类task。每一个task实现了特定接口对象。因为Ant构建文件时XML格式的文件,因此和容易维护和书写,并且结构很清晰。Ant能够集成到开发环境中。因为Ant的跨平台性和操做简单的特色,它很容易集成到一些开发环境中去。 Ant 开发Ant的构建文件当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每一个人使用。Ant构建文件默认命名为build.xml,也能够取其余的名字。只不过在运行的时候把这个命名看成参数传给Ant。构建文件能够放在任何的位置。通常作法是放在项目顶层目录中,这样能够保持项目的简洁和清晰。下面是一个典型的项目层次结构。 (1) src存放文件。 (2) class存放编译后的文件。 (3) lib存放第三方JAR包。 (4) dist存放打包,发布之后的代码。 Ant构建文件是XML文件。每一个构建文件定义一个惟一的项目(Project元素)。每一个项目下能够定义不少目标(target元素),这些目标之间能够有依赖关系。当执行这类目标时,须要执行他们所依赖的目标。每一个目标中能够定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务能够为3类。 (1) 核心任务。核心任务是Ant自带的任务。 (2) 可选任务。可选任务实来自第三方的任务,所以须要一个附加的JAR文件。 (3) 用户自定义的任务。用户自定义的任务实用户本身开发的任务。 在有eclipse集成环境下ant其实不是很重要,但有些项目须要用到,另外经过eclipse来学习和理解ant是个很好的途径,因此写他demo总结下要点,但愿可以帮到你们。 1、本人测试环境eclipse3.6已自动集成了ant环境, 因此就不用单独下载配置ant环境了。 若是没有eclipse集成环境能够本身下载ant http://www.apache.org/ 下载最新的版本 解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:ANT_HOME:D:\apache-ant-1.9.2,PATH:%ANT_HOME%\bin) 测试方法:开始-->运行-->cmd进入命令行-->键入 ant 回车,若是看到 Buildfile: build.xml does not exist! Build failed 说明已经完成ant的设置。 2、体验ant 就像每一个语言都有HelloWorld同样,一个最简单的应用能让人感觉一下Ant 1. 首先你要知道你要干什么,我如今想作的事情是: 编写一些程序->编译它们->把它打包成jar包->把他们放在应该放置的地方->运行它们 这里为了简单起见只写一个程序以下: [java] view plain copy 在CODE上查看代码片派生到个人代码片 package test; /** * @author mijing * @version 2016年3月23日 上午10:24:59 */ public class Test1 { public static void main(String[] args){ System.out.println("hello"); } } 2. 为了达到上边的目的,你能够手动的用javac 、copy 、jar、java来完成,可是考虑一下若是你有成百上千个类,在屡次调试,部署的时候,一次次的javac 、copy、jar、java那将是一份辛苦的工做。如今看看ant怎么优雅的完成它们。 要运行ant须要有一个build.xml虽然不必定要叫这个名字,可是建议你这么作 下边就是一个完整的build.xml,而后咱们来详细的解释每一句 [java] view plain copy 在CODE上查看代码片派生到个人代码片 <?xml version="1.0" encoding="UTF-8"?> <project name="testForAnt" default="run" basedir="."> <!--properities--> <property name="src.dir" value="src"/> <property name="report.dir" value="report" /> <property name="classes.dir" value="classes" /> <property name="lib.dir" value="lib"/> <property name="dest.dir" value="dest" /> <property name="test_jar" value="test1.jar"/> <!--定义classpath--> <path id="master-classpath"> <fileset file="${lib.dir}/*.jar" /> <pathelement path="${classes.dir}"/> </path> <!--初始化任务--> <target name="init"> <mkdir dir="${dest.dir}"/> </target> <!--编译--> <target name="compile" depends="init" description="compile the source files"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" > <classpath refid="master-classpath"/> </javac> </target> <!--测试--> <target name="test" depends="compile" description="run junit test"> <mkdir dir="${report.dir}"/> </target> <!--打包成jar--> <target name="build" depends="compile"> <jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}"> </jar> </target> <!-- <target name="pack" depends="compile" description="make .jar file"> <jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}"> </jar> </target>--> <target name="run" depends="build"> <java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/> </target> <target name="clean" > <delete dir="${test.dir}" /> </target> <target name="rerun" depends="clean,run"> <ant target="clean" /> <ant target="run" /> </target> </project> 解释: <?xml version="1.0" encoding="UTF-8" ?> build.xml中的第一句话,没有实际的意义 <project name="testForAnt" default="run" basedir="."> </project> ant的全部内容必须包含在这个里边,name是你给它取的名字,即工程名字,basedir顾名思意就是工做的根目录。.表明当前目录。default表明默认要作的事情。 <!--properities--> <property name="src.dir" value="src"/> <property name="report.dir" value="report" /> <property name="classes.dir" value="classes" /> <property name="lib.dir" value="lib"/> <property name="dest.dir" value="dest" /> <property name="test_jar" value="test1.jar"/> 相似于程序中的全局变量,这样在下面若是屡次使用某个值时,直接引用name变量名便可,在以后的修改中,也只须要修改此处的value便可。在后面的使用中,只须要使用"${name}"便可使用对应的变量。 <!--初始化任务--> <target name="init"> <mkdir dir="${dest.dir}"/> </target> 把你想作的每一件事情写成一个target ,它有一个名字,depends是它所依赖的target,若与多个target存在依赖关系时,须要以“,”间隔。Ant会依照depends属性中target出现的顺序依次执行每一个target。被依赖的target会先执行。例如在本build.xml文件中,在执行这个target(例如这里的compile)以前ant会先检查init是否曾经被执行过,若是执行过则直接执行compile,若是没有则会先执行它依赖的target例如这里的init,而后在执行这个target 如咱们的计划 <!--编译--> <target name="compile" depends="init" description="compile the source files"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" > <classpath refid="master-classpath"/> </javac> </target> <!--测试--> <target name="test" depends="compile" description="run junit test"> <mkdir dir="${report.dir}"/> </target> <!--打包成jar--> <target name="build" depends="compile"> <jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}"> </jar> </target> <!-- <target name="pack" depends="compile" description="make .jar file"> <jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}"> </jar> </target>--> <!--运行--> <target name="run" depends="build"> <Java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/> </target> 为了避免用拷贝,咱们能够在最开始定义好目标文件夹,这样ant直接把结果就放在目标文件夹中了 ,即在打包的target为build时,jarfile记为要存储的jar包路径和名称,basedir为class文件的位置 为了更多一点的功能体现,又加入了两个target 删除生成的文件 <target name="clean" > <delete dir="${test.dir}" /> </target> 再次运行,这里显示了如何在一个target里边调用其余的target <target name="rerun" depends="clean,run"> <ant target="clean" /> <ant target="run" /> </target> 在eclipse中使用时,右键build.xml文件,选择Run as -->Ant Build便可。 运行结果以下所示: 对于上述警告warning: 'includeantruntime' was not set,只须要在target为compile处加上includeantruntime="on" ,即以下: <target name="compile" depends="init" description="compile the source files"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="on"> <classpath refid="master-classpath"/> </javac> </target> 在命令行使用ant时,键入ant ,你会发现一个个任务都完成了。每次更改完代码只须要再次键入ant。 有的时候咱们可能并不想运行程序,只想执行这些步骤中的某一两个步骤,例如我只想从新部署而不想运行,键入 ant build ant中的每个任务均可以这样调用ant + target name 好了,这样一个简单的ant任务完成了。