Ant安装
第一步下载http://ant.apache.org/第二步解压文件介绍bin:批处理文件etc:外部依赖的文件lib:库manual:帮助指南第三步配置环境变量配置Ant前提是java的环境变量必须配置好ANT_HOME = D:\Program Files\apache-ant-1.9.2path = D:\Program Files\apache-ant-1.9.2\bin第四步测试配置是否成功如果在命令行输入ant出现Buildfile: build.xml does not exist!Build failed说明配置成功
设置Ant文档路径(编写Ant提示)
设置Ant运行环境(默认运行环境是JDK的)
Ant简介
Apache Ant是基于Java的生成工具 全称是 another neat tool(另一个整洁工具的意思),简写是 ant(蚂蚁的意思) Ant是一个名叫build的xml文件是通过build.xml来进行构件的Ant的project标签是根元素,target标签每一项具体的任务
命令行执行Ant
构件脚本为<?xml version="1.0" encoding="UTF-8"?><!--先删除后加helloworld文件夹--><project default="second"><target name="init"><delete dir="helloworld" /></target><target name="second" depends="init"><mkdir dir="helloworld" /></target></project>隐式执行如果构件脚本名称为build.xmlD:\>ant如果构件脚本名称不为build.xml,而是其他的(用mybuild.xml举例)D:\>ant -f mybuild.xml显式执行如果构件脚本名称为build.xmlD:\>ant init second如果构件脚本名称不为build.xml,而是其他的(用mybuild.xml举例)D:\>ant -f mybuild.xml init second如果build文件在MyEclipse项目中可以点击build.xml右键选择Run As执行
使用MyEclipse自带插件单个运行Ant
Ant注释/描述
第一种使用description属性<target name="init" description="删除文件"><delete dir="helloworld" /></target>第二种使用description标签<description>删除文件</description><target name="init"><delete dir="helloworld" /></target>
Ant模式匹配
对目录进行匹配例如src*/*.java将匹配带src前缀的任何目录中的所有.java文件**/*.java目录结构下所有.java文件需要注意的是*/和**/是不一样的,一个是当前目录下,一个是所有目录下
Ant拷贝文件
copy标签分析file属性源文件tofile属性目标文件拷贝一<target name="init"><delete dir="build" /><mkdir dir="build/src" /><copy file="src/com/itlwc/HelloWorld.java" tofile="c:/CopyHelloWorld.java"></copy></target>拷贝二(具有剪切功能,拷贝之后源文件删除)<target name="init"><delete dir="build" /><mkdir dir="build/src" /><copy file="src/com/itlwc/HelloWorld.java" tofile="c:/CopyHelloWorld.java"></copy></target>copy标签分析todir属性拷贝到那 refid属性依赖(从那拷贝)fileset标签分析 fileset可以设定一组文件集进行操作,dir指明文件集要进行选择的路径, id可以指定这个文件的名称,在使用的时候进行直接引用 include表示包含, exclude表示排除 <fileset id="src.path" dir="src"> <!--包括所有目录下的所有文件--> <include name = "**/*.*"/> <!--排除T开头的文件--> <exclude name = "**/T*"/> <!--排除.java文件--> <exclude name = "**/*.java"/> </fileset>拷贝三(引用内部文件集)<target name="init"><delete dir="build" /><mkdir dir="build/src" /><copy todir="build/src"><fileset dir="src" includes="**/*.*" /></copy></target>拷贝四(引用外部文件集id)<fileset id="src.path" dir="src" includes="**/*.*" /><target name="init"><delete dir="build" /><mkdir dir="build/src" /><copy todir="build/src"><fileset refid="src.path"></fileset></copy></target>拷贝五(引用外部文件集id另一种写法)<fileset id="src.path" dir="src"> <include name = "**/*.*"/> </fileset> <target name="init" depends="init"> <delete dir="build" /><mkdir dir="build/src" /> <copy todir="build/src"> <fileset refid="src.path"></fileset> </copy> </target>
Ant编译Java文件
javac标签分析destdir 编译到那 srcdir 编译的src的路径编译<target name="init"><delete dir="build"/><mkdir dir="build/classes"/><javac srcdir="src" destdir="build/classes"></javac></target>javac任务的重要特点在于,它仅编译那些认为需要编译的文件,如果某个类的已经存在,并且对应的源文件没有改变过,不会被重新编译
Ant创建JAR文件
JAR文件能够包含任意类型的文件,比如class文件,XML文件,图片,清单文件等等jar标签分析destfile属性 打包到那 basedir属性 打包那些打包代码<!--打包必须先编译--><target name="init"><delete dir="build" /><mkdir dir="build/classes" /><mkdir dir="build/dist" /><javac srcdir="src" destdir="build/classes"></javac><jar destfile="build/dist/package.jar" basedir="build/classes"></jar></target>创建JAR时会在JAR中再生成META-INF/MANIFEST.MF文件,文件(清单文件)内容如下Manifest-Version: 1.0Ant-Version: Apache Ant 1.7.0Created-By: 22.1-b02 (Oracle Corporation)对于图形界面程序来说,打成架包是可以直接双击去运行的,要想实现双击运行,必须在清单文件中有Main-Class(包含main()主类的名字),内容如下Manifest-Version: 1.0Ant-Version: Apache Ant 1.7.0Created-By: 22.1-b02 (Oracle Corporation)Main-Class: com.itlwc.HelloWorld打架包时手动配置清单文件配置如下<!--打包必须先编译--><target name="init"><delete dir="build" /><mkdir dir="build/classes" /><mkdir dir="build/dist" /><javac srcdir="src" destdir="build/classes" /><jar destfile="build/dist/package.jar" basedir="build/classes"><!--指定我们可用的属性--><manifest><!--user.name使用自己的名字(不需要自定义Ant内置的属性)Ant内置的属性是从Java的属性文件中提取出来的user.name表示登陆操作系统的用户名--><attribute name="Built-By" value="${user.name}" /><attribute name="Main-Class" value="com.itlwc.HelloWorld" /></manifest></jar></target>生成的清单文件如下Manifest-Version: 1.0Ant-Version: Apache Ant 1.7.0Created-By: 22.1-b02 (Oracle Corporation)Built-By: LwcMain-Class: com.itlwc.HelloWorld
Ant运行
HelloWorld.javapackage com.itlwc;public class HelloWorld {public static void main(String[] args) {for (String arg : args) {System.out.println("hello "+arg);}}}bulid.xml<project default="init"><fileset id="src.path" dir="src"><include name="**/*.*" /></fileset><target name="init"><delete dir="build" /><mkdir dir="build/classes" /><mkdir dir="build/dist" /><javac srcdir="src" destdir="build/classes" /><jar destfile="build/dist/package.jar" basedir="build/classes"><manifest><attribute name="Built-By" value="${user.name}" /><attribute name="Main-Class" value="com.itlwc.HelloWorld" /></manifest></jar><echo>基于类路径的classname来执行</echo><java classname="com.itlwc.HelloWorld" classpath="build/classes"><arg value="张三" /><arg value="李四" /><arg value="王五" /></java><echo>基于jar来执行</echo><java jar="build/dist/package.jar" fork="true"><arg value="张三" /><arg value="李四" /><arg value="王五" /></java></target></project>
Ant对CVS的支持
CVS任务的主要属性是cvsRoot,它是对CVS库的完整引用,包括连接方法和用户详细信息参数如下[:method:][[user][:password]@]hostname[:[port]]/path/to/repository提取是CVS任务的默认操作,其他操作可以通过使用command属性来指定,配置如下cvsRoot标签分析packagecvs下具体项目command对这个项目做什么操作dest操作到那里案例<!--pserver连接的方式(默认的)Lwc登陆操作系统的用户名123456登陆的密码127.168.0.1登陆机器的IP地址c:\cvscvs的仓库路径--><target name="init"><cvs cvsroot=":pserver:Lwc:123456@127.168.0.1:c:\cvs" package="Ant"command="checkout"dest="c:\mycvs"></cvs></target>
Ant生成时间戳
用来表示时间戳时间戳就是生成环境中使用当前时间和日期(一般用在记录生成的时间)有时候不需要属性,许多情况下使用<tstamp/>就行了三个属性DSTAMP默认格式yyyymmdd20140406TSTAMP默认格式hhmm1603TODAY完整时间2014年04月06日案例<target name="dist" depends="myCompile"><!--获取当前时间,tstamp必须写,DSTAMP才能输出时间--><tstamp></tstamp><!--使用DSTAMP--><jar destfile="build/dist/package-{$DSTAMP}.jar" basedir="build/src"></jar></target>生成JAR文件为: package-20140406.jar
Ant 替换和查找任务
执行文件中的替换和查找replace标签分析file查找的文件token查找的字符串value新的字符串summary提供详细信息,true或者false,执行的数目案例<target name="init"><replace file="src/com/itlwc/HelloWorld.java" token="hello" value="Hello"summary="ture"></replace></target>
Ant属性
Ant的值一旦被设置不能被改变 定义属性使用property标签 <property name="属性的名字" value="属性的值"/> 使用方法(直接使用) <!--创建helloworld文件夹--> <project default="init"> <property name="createFile" value="helloworld" /> <target name="init"> <!--这里的${createFile}将会被替换成helloworld--> <mkdir dir="${createFile}" /> </target> </project> 使用方法(嵌套使用) <!--创建helloworldGo文件夹--> <project default="init"> <property name="createFile" value="helloworld" /> <target name="init"> <!--这里的${createFile}Go将会被替换成helloworldGo--> <mkdir dir="${createFile}Go" /> </target> </project>使用属性定义相应路径时,一定使用个location不使用value,location属性自动转换为当前系统可以识别的路径(只能处理路径地址) <property name="createFile" location="helloworld/abc"/> 如果属性太多可以把属性定义在外部properties文件build.propertiescreateFile=helloworldbuild.xml<project default="init"> <property file="build.properties"/> <target name="init"> <mkdir dir="${createFile}" /> </target> </project>特别注意,路径不建议在外部properties文件中定义,此时就不会设置location的值
Ant内置属性
<?xml version="1.0" encoding="UTF-8"?><project><!--build.xml路径--><echo>${ant.file}</echo><!--ant路径--><echo>${ant.home}</echo><!--JDK版本--><echo>${ant.java.version}</echo><!--ant库路径--><echo>${ant.library.dir}</echo><!--ant版本号--><echo>${ant.version}</echo><!--把环境变量的参数导入到env这个变量中--><property environment="env" /><!--Java路径--><echo>${env.JAVA_HOME}</echo></project>