Ant 簡易教程


前言

Apache Ant,是一個將軟件編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用於Java環境中的軟件開發。由Apache軟件基金會所提供。

Ant是純Java語言編寫的,所以具有很好的跨平台性。

 

1 下載和安裝

1.1 下載

 

ant的官方下載地址:http://ant.apache.org/bindownload.cgi

進入頁面后,在下圖的紅色方框中可以下載最新版本。筆者下載的版本是 apache-ant-1.9.4。

 

1.2 配置環境變量

配置環境變量(我的電腦 -> 屬性 -> 高級 -> 環境變量)。

設置ant環境變量:

ANT_HOME     C:/ apache-ant-1.9.4

path               C:/ apache-ant-1.9.4/bin

 

classpath        C:/apache-ant-1.9.4/lib

 

1.3 驗證

點擊 開始 -> 運行 -> 輸入cmd

執行構建文件

輸入如下命令:ant
如果出現如下內容,說明安裝成功:

Buildfile: build.xml does not exist!
Build failed
注意:因為ant默認運行build.xml文件,這個文件需要我們創建。

如果不想命名為build.xml,運行時可以使用 ant -buildfile test.xml 命令指明要運行的構建文件。

 

查看版本信息

輸入 ant  -version,可以查看版本信息。 

 

但如果出現 'ant' 不是內部或外部命令,也不是可運行的程序或批處理文件

說明安裝失敗:(可以重復前述步驟,直至安裝成功。)

 

2 例子

在安裝和配置成功后,我們就可以使用ant了。

為了讓讀者對ant有一個直觀的認識,首先以Ant官方手冊上的一個簡單例子做一個說明。

以下是一個build.xml文件的內容:

< project  name ="MyProject"  default ="dist"  basedir ="." >
     < description >
        simple example build file
     </ description >
   <!--  set global properties for this build  -->
   < property  name ="src"  location ="src" />
   < property  name ="build"  location ="build" />
   < property  name ="dist"   location ="dist" />

   < target  name ="init" >
     <!--  Create the time stamp  -->
     < tstamp />
     <!--  Create the build directory structure used by compile  -->
     < mkdir  dir ="${build}" />
   </ target >

   < target  name ="compile"  depends ="init"
        description
="compile the source "   >
     <!--  Compile the java code from ${src} into ${build}  -->
     < javac  srcdir ="${src}"  destdir ="${build}" />
   </ target >

   < target  name ="dist"  depends ="compile"
        description
="generate the distribution"   >
     <!--  Create the distribution directory  -->
     < mkdir  dir ="${dist}/lib" />

     <!--  Put everything in ${build} into the MyProject-${DSTAMP}.jar file  -->
     < jar  jarfile ="${dist}/lib/MyProject-${DSTAMP}.jar"  basedir ="${build}" />
   </ target >

   < target  name ="clean"
        description
="clean up"   >
     <!--  Delete the ${build} and ${dist} directory trees  -->
     < delete  dir ="${build}" />
     < delete  dir ="${dist}" />
   </ target >
</ project >

在這個xml文件中,有幾個target標簽,每個target對應一個執行目標。

我們將這個build.xml放在 D:\Temp\ant_test 路徑下,然后在dos界面下進行測試。

ant init

在 D:\Temp\ant_test 路徑下創建了一個build目錄,執行成功。

 

ant compile

提示錯誤,原來是在build.xml的所在目錄下找不到src目錄。好的,我們直接創建一個src目錄,然后再次嘗試。

這次,執行成功。

 

ant dist

在 D:\Temp\ant_test 路徑下創建了一個dist目錄,執行成功。

 

ant clean

清除創建的build和dist目錄,執行成功。

 

一個細節

細心的讀者,想必已經發現一個問題——在執行 ant compile 和 ant dist 命令的時候把前面的命令也執行了。這是為什么呢?

請留意一下build.xml中的內容。有部分 target 標簽中含有 depends 關鍵字。

這表明,當前的 target 在執行時需要依賴其他的target,必須先執行依賴的target,然后再執行。

 

3 關鍵元素

 

Ant的構件文件都是XML格式的。每個構件文件包含一個project元素和至少一個target。

target元素可以包含多個task元素。

 

3.1 Project 元素

 

project 元素是構建文件的根元素。

一個 project 元素可以有多個 target 元素,一個 target 元素可以有多個 task。

在上節的例子中,project標簽里有三個屬性。 

< project  name ="MyProject"  default ="dist"  basedir ="." >

name屬性,指示 project 元素的名字。例子中的名字就是 MyProject。

default屬性,指示這個 project 默認執行的 target。在本文的例子中,默認執行的 target 為 dist。

如果我們輸入命令 ant 時,不指定 target 參數,默認會執行 dist 這個 target。

basedir屬性,指定根路徑的位置。該屬性沒有指定時,使用Ant的構件文件的所在目錄作為根目錄。

 

3.2 Target 元素

target 元素是 task 的容器,也就是 Ant 的一個基本執行單元。

以上節例子中的 compile 來舉例。

< target  name ="compile"  depends ="init"  description ="compile the source "   >
     <!--  Compile the java code from ${src} into ${build}  -->
     < javac  srcdir ="${src}"  destdir ="${build}" />
</ target >
這個 target 中出現了幾個屬性。

name屬性,指示target元素的名稱。

這個屬性在一個project元素中必須是唯一的。這很好理解,如果出現重復,Ant就不知道具體該執行哪個 target 了。

depends屬性,指示依賴的 target,當前的 target 必須在依賴的 target 之后執行。

description屬性,是關於 target 的簡短說明。

此外,還有其他幾個未出現在構建文件中的屬性。

if屬性,驗證指定的屬性是否存在,若不存在,所在target將不會被執行。

unless屬性正好和 if屬性相反,驗證指定的屬性是否存在,若存在,所在target將不會被執行。

extensionOf屬性,添加當前 target 到 extension-point 依賴列表。——Ant1.8.0新特性。

extension-point 元素和 target 元素十分類似,都可以指定依賴的target。但是不同的是,extension-point 中不能包含任何 task。

請看以下實例:

< target  name ="create-directory-layout" >
   ...
</ target >
< extension-point  name ="ready-to-compile" depends ="create-directory-layout" />
< target  name ="compile"  depends ="ready-to-compile" >
   ...
</ target >

調用target順序:  create-directory-layout --> 'empty slot' --> compile

< target  name ="generate-sources" extensionOf ="ready-to-compile" >
   ...
</ target >
調用target順序:  create-directory-layout --> generate-sources  --> compile
onMissingExtensionPoint屬性:當無法找到一個extension-point時,target嘗試去做的動作("fail", "warn", "ignore")。 ——Ant1.8.2新特性。

 

 

3.3 Task 元素

task是一段可以被執行的代碼。

一個task可以有多個屬性, 一個屬性可以包含對一個 property 的引用。

task的通常結構為

< name  attribute1 ="value1"  attribute2 ="value2"  ...  />

其中,name 是 task 的名字, attributeN 是屬性名, valueN 是這個屬性的值。

還是以 compile 做為例子:

< target  name ="compile"  depends ="init"  description ="compile the source "   >
     <!--  Compile the java code from ${src} into ${build}  -->
     < javac  srcdir ="${src}"  destdir ="${build}" />
</ target >

在 compile 這個 target 標簽中包含了一個任務。

這個任務的動作是:執行JAVA編譯,編譯src下的代碼,並把編譯生成的文件放在build目錄中。

常用task 

javac:用於編譯一個或者多個Java源文件,通常需要srcdir和destdir兩個屬性,用於指定Java源文件的位置和編譯后class文件的保存位置。
< javac  srcdir ="${src}"  destdir ="${build}"  classpath ="abc.jar"  debug ="on"  source ="1.7"   />
java:用於運行某個Java類,通常需要classname屬性,用於指定需要運行哪個類。
< java  classname ="test.Main" >
     < arg  value ="-h"   />
     < classpath >
         < pathelement  location ="dist/test.jar"   />
     </ classpath >
</ java > 
jar:用於生成JAR包,通常需要指定destfile屬性,用於指定所創建JAR包的文件名。除此之外,通常還應指定一個文件集,表明需要將哪些文件打包到JAR包里。
< jar  jarfile ="${dist}/lib/MyProject-${DSTAMP}.jar"  basedir ="${build}" />
echo:輸出某個字符串。
< echo  message ="Building to ${builddir}" />
< echo >You are using version ${java.version}  of Java! This message spans two lines. </ echo >
copy:用於復制文件或路徑。
< copy  todir ="${builddir}/srccopy" >
     < fileset  dir ="${srcdir}" >
         < include  name ="**/*.java" />
     </ fileset >
     < filterset >
         < filter  token ="VERSION"  value ="${app.version}" />
     </ filterset >
</ copy > 
delete:用於刪除文件或路徑。
< delete  file ="/lib/ant.jar"   />
< delete  dir ="lib"   />
< delete >
     < fileset  dir ="."  includes ="**/*.bak"   />
</ delete > 
mkdir:用於創建文件夾。
< mkdir  dir ="${dist}/lib"   /> 
move:用戶移動文件和路徑。
< move  todir ="some/new/dir" >
     < fileset  dir ="my/src/dir" >
         < include  name ="**/*.jar"   />
         < exclude  name ="**/ant.jar"   />
     </ fileset >
</ move > 

 

3.4 Property 元素

Property 是對參數的定義。

project的屬性可以通過property元素來設定,也可在Ant之外設定。若要在外部引入某文件,例如build.properties文件,可以通過如下內容將其引入:<property file=” build.properties”/>。

property元素可用作 task 的屬性值。在task中是通過將屬性名放在“${”和“}”之間,並放在task屬性值的位置來實現的。

例如 complile 例子中,使用了前面定義的 src 作為源目錄。

< javac  srcdir ="${src}"  destdir ="${build}" />

Ant提供了一些內置的屬性,它能得到的系統屬性的列表與Java文檔中System.getPropertis()方法得到的屬性一致,這些系統屬性可參考sun網站的說明。

 

3.5 extension-point元素

和 target 元素十分類似,都可以指定依賴的target。但是不同的是,extension-point 中不能包含任何 task。——Ant1.8.0新增特性。

在 target元素中的例子里已提到過,不再贅述。

 

參考資料

[1] ant官方手冊:http://ant.apache.org/manual/index.html

[2] http://www.blogjava.net/amigoxie/archive/2007/11/09/159413.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM