Ant是Apache软件基金会的一个顶级项目。是一个构建工具,如:构建一个项目,包括源代码的编译,打包成jar文件,部署等步骤。
一、Ant的配置
1、将Ant下bin目录放到class目录下。
2、建立一个ANT-HOME,指向Ant的主目录下,即ant目录下
Ant的运行:
1、在控制台中输入 ant命令回车。就会默认寻找当前目录下的build.xml进行构建。
2、可以指定build.xml的名称。使用 ant -f mybuild.xml文件进行构建。
3、ant build.xml init 或 ant -f mybuild.xml init指定执行那个目标(target)
Ant的Builder没有自己的语法。完全依靠xml的语法。但是提供了一些能够被Ant识别的元素。
<object defult="默认执行的target"> :根标签
<target name="target的名称" depends="依赖那个target" discription="描述信息"> :目标标签
<mkdir dir="文件名称和目录"> :创建目录
<delete dir="删除文件的的路径和名称"> :删除目录
如:
<?xml version="1.0" encoding="UTF-8"?> <object default="seconde"> <target name="init"> <mkdir dir="c:\hello"/> <mkdir dit="C:\world"/> </targer> <target name="seconde" depends="init"> <delete dir="c:\hello"/> <delete dir="c:\world"/> </targer> </object>
功能如下:
Ant默认只执行seconde目标(target),而init是创建两个文件目录。seconde目标(target)依赖于init,进行删除刚才在init中创建的目录。
<description>
描述信息(项目的信息)
</description>
<!-- 注释信息 -->为了个目标添加注释信息,以添加可读性
二、属性的使用:
1、定义属性
<property name="proName" value="proValue" location="路径/file/dd"/>
2、使用属性
${proName}
如:
<object default=""> <property name="file" value="fileName"/> <target> <mkdir dir="${file}"/> </target> </object>
三、编译源代码:
<javac srcdir="src"/>
这个标签寻找src目录中以.java为后缀的所有文件,并对它们调用javac编译器,从而在相同的目录中生成类文件。当然,将类文件放在一个单独的目录结构中通常会更清晰;可以通过destdir属性来让Ant做到这点。
如:
<object name="myObject" default="myTarget"> <property name="complitFile" value="complit"/> <target name="preprocess"> <mkdir dir="${complitFile}"/> </target> <target name="myTarget"> <javac srcdir="src" descdir="${complitFile}"/> </target> </object>
其他属性:
-classpath: 等价与java的-classpath选项
-debug="true":指示编译器应该带调试信息编译源代码
四、创建一个jar文件:
<jar destfile="生成jar的名称" basedir="字节码文件的所在目录"> <manifest>指定运行类 <attribute name="Built-By" value="${user.name}"/>操作系统登录名称 <attribute name="Main-Class" value="cn.com.test.TestFram"/>mian方法类 </manifest> </jar>
五、时间戳
在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。这可能涉及编辑一个文件,以便插入一个字符串来指定日期和时间,或将这些信息合并到JAR或ZIP文件中。
这种需要通过简单但是非常有用的tstamp任务来解决。这个任务通常在某次生成过程开始时调用,比如在一个init目标中。这个任务不需要属性,许多情况下只需
<tstamp/>就足够。
属性:
DSTAMP日期
TSTAMP时间
TODAY当前日期
<target name="myTarget"> <tstamp></tstamp> <jar destfile="test-${DSTAMP}.java" basedir="compile"> <attribute name="Built-By" value="${user.name}"/> <attribute name="Main-Class" value="cn.com.test.TestFrame"/> </jar> </target>
六、文件系统操作
1、创建和删除目录
<mkdir dir=""/>创建目录
<delete dir="" file=""/>删除目录
2、复制和移动
<copy file="被复制的文件" tofile="目标文件" todir="目标目录"/>
<move file="被移动的文件" tofile="目标文件" todir="目标目录"/>
七、ZIP文件
<zip destfile="output.zip" basedir="output"/> <unzip src="output.tar.gz" dest="extractDir"/>
八、CVS集成
<property name="cvsRoot" value=":pserver:登录名:IP地址:仓库名称"/> <property name="destLocation" value="c:\"/> <target> <cvs cvsroot="${cvsRoot}" package="检出模块的名字" command="指定执行的命令checkout" desc="${destLocation}"/> </target>
九、替换
<replace file="文件" token="被替代的字符串" value="新值"/>
十、创建自定义的任务
1、为实现一个简单的自定义任务,我们所需做的就是扩展org.apache.tools.ant.Task类,并重写execute()方法
<taskdef name="自定义标签名称" classname="处理类" classpath="class文件路径"/> <target name="自定义标签"> <自定义标签名称 属性="" 属性=""/> </target>
下面是一个实现将input.txt文件拷贝到output.txt。
package ant; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; public class TestAnt extends Task{ private File srcFile; private File destFile; @Override public void execute() throws BuildException { try { BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile))); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destFile))); String line = ""; while((line = reader.readLine()) != null){ writer.write(line); writer.newLine(); } writer.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } super.execute(); } public File getSrcFile() { return srcFile; } public void setSrcFile(File srcFile) { this.srcFile = srcFile; } public File getDestFile() { return destFile; } public void setDestFile(File destFile) { this.destFile = destFile; } }
build.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="myProject" basedir="." default="tag"> <taskdef name="myTag" classname="ant.TestAnt" classPath="bin"/> <target name="tag"> <myTag srcFile="input.txt" destFile="output.txt"/> </target> </project>
更多IT技术请浏览:www.bug315.com