1.安裝Ant
先從http://ant.apache.org/下載Ant,解壓到任一目錄下面,比如E:\Lab
然后設(shè)置環(huán)境變量
ANT_HOME=E:\Lab\apache-ant-1.8.2
path=E:\Lab\apache-ant-1.8.2\bin
最后驗(yàn)證是否安裝成功
在dos中輸入ant,如果顯示
Buildfile: build.xml does not exist!
Build failed
則安裝成功
2.基礎(chǔ)元素
project元素
project元素是Ant文件的根元素
project的屬性
Attribute | Description | Required |
name | 項(xiàng)目名稱 | No |
default | 當(dāng)沒有指定target時(shí)使用的缺省target | Yes |
basedir | 用于指定基路徑的位置。該屬性沒有指定時(shí),使用 Ant 的構(gòu)件文件的附目錄作為基準(zhǔn)目錄。 | No |
target元素
target為Ant的基本執(zhí)行單元,它可以包含一個(gè)或多個(gè)具體的任務(wù)。多個(gè)target 可以存在相互依賴關(guān)系
Ant會(huì)依照depends屬性中target出現(xiàn)的順序(從左到右)依次執(zhí)行每個(gè)target。然而,要記住的是只要某個(gè)target依賴于一個(gè)target,后者就會(huì)被先執(zhí)行。
<target name="A"/> <target name="B" depends="A"/> <target name="C" depends="B"/> <target name="D" depends="C,B,A"/> |
假定我們要執(zhí)行target D。從它的依賴屬性來看,你可能認(rèn)為先執(zhí)行C,然后B,最后A被執(zhí)行。錯(cuò)了,C依賴于B,B依賴于A,所以先執(zhí)行A,然后B,
然后C,最后D被執(zhí)行。
一個(gè)target只能被執(zhí)行一次,即時(shí)有多個(gè)target依賴于它。
若想更好的控制build過程,可以使用if或unless。
if 屬性
用于驗(yàn)證指定的屬性是否存在,若不存在,所在 target 將不會(huì)被執(zhí)行。
unless 屬性
該屬性的功能與 if 屬性的功能正好相反,它也用于驗(yàn)證指定的屬性是否存在,若不存在,所在 target 將會(huì)被執(zhí)行。
property元素
property元素可看作參量或者參數(shù)的定義(即經(jīng)常使用的變量),project 的屬性可以通過 property 元素來設(shè)定,也可在 Ant 之外設(shè)定。
name是變量的名稱 value是變量的值,要用某個(gè)變量時(shí)使用${name}方式調(diào)用。
3.完整示例
創(chuàng)建一個(gè)java項(xiàng)目
HelloWorld.java
package com.test;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
編寫build.xml文件
注:build.xml放在和src同級(jí)目錄,而不是在src下級(jí)目錄
目錄結(jié)構(gòu)是
MyProject <dir>
|--lib <dir> --庫(kù)目錄
|--classes <dir> --目的文件目錄
|--src <dir> --源文件目錄
|--doc <dir> --api文檔目錄
|--build.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project name="helloWorld" default="run" basedir=".">
<property name="src" value="src"/>
<property name="dest" value="build/classes"/>
<property name="lib" value="lib"></property>
<property name="hello_jar" value="hello1.jar"></property>
<!--初始化 之前執(zhí)行刪除操作-->
<target name="init" depends="clean">
<mkdir dir="${dest}"/>
</target>
<!--編譯生成class文件 -->
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"></javac>
</target>
<!--將編譯后的class文件打包-->
<target name="build" depends="compile">
<mkdir dir="${lib}"/>
<jar jarfile="${lib}/${hello_jar}" basedir="${dest}"></jar>
</target>
<target name="run" depends="build">
<java classname="com.test.HelloWorld" classpath="${lib}/${hello_jar}"></java>
</target>
<!--刪除-->
<target name="clean">
<delete dir="${dest}"></delete>
<delete dir="${lib}"></delete><!-- 是dir 刪除目錄 ,不是file 刪除文件-->
</target>
</project>
整個(gè)過程:初始化----編譯----打包---放到相應(yīng)的位置
參考:
http://www.cnblogs.com/philander/articles/1782254.html
http://www.cnblogs.com/elric/archive/2011/03/19/1988840.html