1. 程式人生 > >Ant介紹與使用

Ant介紹與使用

    一:Ant是什麼

    Ant相當於Linux環境下的shell指令碼,只不過是用xml文件來編寫的。我們知道,在linux環境中,可以通過編寫shell指令碼,封裝一系列繁瑣而日常需要經常重複的操作。在需要進行這些操作時,只需執行這個指令碼就可以批處理這些操作了。Ant指令碼也是一樣,只不過它一般是為了方便Java專案的編譯、執行、測試、打包等工作服務的。

    我們知道,日常開發工作中,一個專案除了編碼外,還需單元測試、整合測試、系統測試,測試過程中可能會不斷修改程式碼,然後再測試。這樣重複而繁瑣的過程是十分耗時間的。在程式編譯、測試通過後,還需要打包匯出,如果之後需要改變了程式碼,那麼這些工作又要重新再做。Ant的產生,就是為了把我們從這些重複而瑣碎的工作中解放出來。

    二:Ant能幹什麼

    Ant指令碼,通過一個xml檔案來制定一系列檔案的建立刪除任務、編譯任務、執行任務、測試任務、打包任務等。我們可以通過ant指令執行這個xml指令碼,來批處理這些任務,這樣就可以實現“一鍵”完成編碼後的編譯、執行、測試、打包匯出等工作,使我們可以更加專注於程式碼的編寫與質量。

    三:Ant的使用

    1:安裝配置

    下載地址:http://ant.apache.org/

    安裝:解壓得到 apache-ant資料夾,這個就是Ant的安裝目錄了,複製到你想安置的地方即可。

    配置:與設定Java執行環境型別:在系統環境變數中新增:ANT_HOME= XX:\XX\apache-ant  (apache-ant所在路徑)

                                             在Path環境變數值後面加上:XX:\XX\apache-ant\bin (apache-ant\bin所在路徑)

    開啟cmd,輸入 ant ,如果出現以下結果則說明Ant配置成功:

    2:編寫Ant指令碼

    一個Ant指令碼即可完成至少一個專案的編譯、執行、測試、打包等工作。Ant指令碼同一命名:build.xml

    指令碼內容:

         1)project 節點:一個指令碼相當於一個project,用一個project來統領指令碼中的眾多操作命令。用這個project物件來指向指令碼本身的基本屬性

         project 元素是 Ant 構件檔案的根元素, Ant 構件檔案至少應該包含一個 project 元素,否則會發生錯誤。

        ● name 屬性:用於指定 project 元素的名稱。

        ● default 屬性:用於指定 project 預設執行時所執行的 target 的名稱。

        ● basedir 屬性:用於指定基路徑的位置。該屬性沒有指定時,使用 build.xml的目錄作為基準目錄。

       2)property節點:屬性節點,相當於Ant指令碼中的變數,通過屬性值來攜帶具體內容。在每個任務中通過 ${屬性名} 訪問其屬性值,從而獲取內容。

       Ant 提供了一些內建的屬性,它能得到的系統屬性的列表與 Java 文件中 System.getProperties() 方法得到的屬性一致。Ant 還提供了一些它自己的內建屬性:

      basedir: project 基目錄的絕對路徑; 

      ant.file: buildfile的絕對路徑;

      ant.version: Ant 的版本資訊;

      ant.project.name: 當前指定的project的名字;

      ant.java.version: Ant 檢測到的JDK版本 。

        3)target節點:任務節點。一個target可以制定一個或內嵌更多工。

        target為ant的基本執行單元,它可以包含一個或多個具體的單元/任務。多個target 可以存在相互依賴關係,target的執行順序可以有兩種方式控制:一種是依賴,depends屬性,AdependsB,則B先執行;另一種就是內嵌:在target A中通過 <ant target="B">命令執行B任務。  

       ● name 屬性:指定 target 元素的名稱,這個屬性在一個 project 元素中是唯一的。我們可以通過指定 target 元素的名稱來指定某個 target 。

       ● depends 屬性:用於描述 target 之間的依賴關係,Ant 會依照 depends 屬性中 target 出現的順序依次執行每個 target ,被依賴的target 會先執行。

       ● if 屬性:用於驗證指定的屬性是存在,若存在,所在 target 才會被執行。

       ● unless 屬性:該屬性的功能與 if 屬性的功能正好相反,若不存在,所在 target 將會被執行。

       ● description 屬性:該屬性是關於 target 功能的簡短描述和說明。 

    4)copy命令

    copy主要用來對檔案和目錄的複製功能。

    5)delete命令 

    對檔案或目錄進行刪除。

    6) mkdir 命令

    建立目錄。

    7)move 命令

    移動檔案或目錄,

    8)echo 命令

    在控制檯輸出資訊。它包括 message 、 file 、 append 和 level 四個屬性。

    9)jar 命令標籤:打包成jar包並匯出

     ● destfile:打包匯出的JAR路徑名,即:匯出jar包到哪裡。

     ● basedir:被打包的檔案,一般是編譯通過的檔案。

     ● includes表示被歸檔的檔案型別。

     ● exchudes表示被排除的檔案型別。

     ● compress表示是否壓縮。

    (打包命令標籤還有war、tgz,解壓包命令uzip)

    10)javac 命令標籤:編譯標籤

    該標籤用於編譯一個或一組java檔案。

    ● srcdir表示源程式的目錄。

    ● destdir表示class檔案的輸出目錄。

    ● include表示被編譯的檔案的模式。

    ● excludes表示被排除的檔案的模式。

    ● classpath表示所使用的類路徑。

    ● debug表示包含的除錯資訊。

    ● optimize表示是否使用優化。

    ● verbose 表示提供詳細的輸出資訊。

    ● fileonerror表示當碰到錯誤就自動停止。 

    11)java 命令標籤:執行標籤

    該標籤用來執行編譯生成的.class檔案。

    ● classname 表示將執行的類名。

    ● jar表示包含該類的JAR檔名。

    ● classpath所表示用到的類路徑。

    ● fork表示在一個新的虛擬機器中執行該類。

    ● failonerror表示當出現錯誤時自動停止。

    ● output 表示輸出檔案。

    ● append表示追加或者覆蓋預設檔案。

    12)arg 引數標籤:可以用於定義測試用例,向執行程式進行輸入,觀察輸出

    通過<arg>元素向其傳遞命令列引數。

   ● values 是一個命令引數。

    ● file 表示一個引數的檔名。

    ● line 表示用空格分隔的多個引數列表。

    ● pathref 引用的path(使用path元素節點定義path)的id

    ● prefix 字首

    ● suffix 字尾 

    13)path節點:表示一個路徑

    path元素用來表示一個類路徑,不過它還可以用於表示其他的路徑。

    ● location 表示一個檔案或目錄。Ant在內部將此擴充套件為一個絕對路徑。

    ● refid 是對當前構建檔案中某處定義的一個path的引用。

    ● path表示一個檔案或路徑名列表。

   3:指令碼基本結構解析

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>

<!--建立project-->
<project default="預設執行的target" basedir=".">

    <!--建立屬性標籤:攜帶資料,在下面的target中使用-->
    <property name="XX"  XX="xx" />
        
    <!--建立任務-->
    <target name="任務名" depends="依賴哪個任務">
                <命令標籤  屬性=“屬性值:指明命令執行的具體內容”/>
    </target>
</project>
複製程式碼

    4:執行指令碼

   ant:在當前目錄下的build.xml執行Ant,執行預設的target。   ant -buildfile build-test.xml:在當前目錄下的build-test.xml執行Ant,執行預設的target。   ant -buildfile build-test.xml targetName:在當前目錄下的build-test.xml執行Ant,根據任務名執行一個target。

   ant -buildfile build-test.xml -D屬性=屬性值 targetName:在當前目錄下的build-test.xml執行Ant,根據任務名執行一個target並指定其某屬性為某值。

目前的Eclipse都集成了ant,但是如何在Eclipse下使用ant呢?

1.新建Java Project-新建Java檔案HelloWorld.java

HelloWorld.java:

package example;
public class HelloWorld {
    public static void main(String[] args) {
       System.out.println("Hello World");
    }
}

2.在工程根目錄下新建build.xml

build.xml:

複製程式碼
<?xml version="1.0" encoding="utf-8"?>
<project default="main" basedir=".">
    <target name="main" depends="compile, compress" description="Main target">
       <echo>Building the .jar file.</echo>
    </target>
    <target name="compile" description="Compilation target">
       <javac srcdir="${basedir}/src/example" />
    </target>
    <target name="compress" description="Compression target">
       <jar jarfile="HelloWorld.jar" basedir="${basedir}/src/example"includes="*.class" />
    </target>
</project>
複製程式碼

此指令碼檔案內容是編譯/src/example下的java檔案,並就地生成class檔案,將這個class檔案打成jar包,HelloWorld.jar。

此時工程的目錄結構如下圖所示:

右鍵選中HelloAnt工程,選擇Properties:

選擇Builders-New…,選擇Ant Build,

Name:Ant_Builder;

Buildfile:${workspace_loc:/HelloAnt/build.xml};

Base Directory:${workspace_loc:/HelloAnt};

(按“Browse Workspace”選擇工程根目錄)

 

在Builder面板中鉤上Ant_Build,去掉Java Builder,即可編譯執行。

每次編譯時,右鍵build.xml,選擇Run As-Ant Build:

編譯結果:

複製程式碼
Buildfile: F:\workfile\ant_test\build.xml
compile:
    [javac] F:\workfile\ant_test\build.xml:7: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
compress:
main:
     [echo] Building the .jar file.
BUILD SUCCESSFUL
Total time: 1 second