ant入門樣本

來源:互聯網
上載者:User
     在上篇博文 《ant的下載與安裝——mybatis學習筆記之預備篇(一)》中,筆者介紹了ant的下載與安裝。本文將介紹如何使用ant建立一個簡單的工程,作為ant的入門樣本。

      在這裡首先和大家分享一下筆者學習新技術的一點心得。每一項技術都會涉及到很多的知識點,這很容易對初學者造成較大的心理壓力。如果剛開始把目標定得過高,寫較複雜的程式的話,會有一個很大的壞處:因為是初學,基礎知識掌握得並不牢固,也缺乏經驗,犯錯誤的幾率更大。那麼此時這個不牢固的基礎知識以及經驗的匱乏,自然會給排錯增加很大的困難,因為你有太多的不確定。這不但耽誤時間,而且對自信心也是一個打擊,至少會加劇自己的心理壓力。然而,如果只是用它寫一個較小的程式的話,實際上只會用到其中很小一部分的知識。這樣出錯後(這是不可避免的),不確定的地方也較少,排錯也容易。因此,筆者的做法通常是先寫出一個簡單的程式,通過這個過程,先牢固掌握最基本的知識並開始積累經驗。然後,再以此為基礎,逐漸擴大編寫程式的複雜度(這樣跨度小)。這樣出錯後,由於先前的知識和經驗的積累,以及較小的跨度,排錯的難度自然大大降低。這樣就可以減輕心理壓力,逐漸樹立自信,比較容易地逐步掌握越來越多的知識。因此,本文以及後續的博文都會貫徹同一條原則:從最簡單的開始,逐漸增加複雜度。本文就先介紹如何編寫一個簡單的ant工程,以後mybatis的學習筆記,都用ant來組織工程。

      存放ant工程所有的檔案需要一個目錄,筆者在自己機器上的E:\DemoPrograms下建立一個目錄AntDemo,用來建立本文的ant工程,其他所有的目錄都以此目錄為基準。在此目錄下需要有三個子目錄,它們是src、lib和classes,其作用分別如下:

src:存放原始碼檔案和工程所需的設定檔;

lib:工程用到的jar包;

classes:編譯後的.class檔案被輸出到此目錄,工程所需的設定檔也會被複製到此目錄下(在後面我們可以看到,實際上這個目錄我們可以讓ant幫我們建立)。

      本樣本將建立一個User對象,並把它以JSON字串的形式輸出(有關JSON的知識,讀者可參考http://www.json.org)。程式非常簡單,純屬樣本。User類是一個簡單的JAVA Bean,代碼如下:


package com.abc.people;  

publicclass User {  

privateint id;  

private String name;  

privateint age;  

private String gender;  

publicint getId() {  

return id;  

    }  

publicvoid setId(int id) {  

this.id = id;  

    }  

public String getName() {  

return name;  

    }  

publicvoid setName(String name) {  

this.name = name;  

    }  

publicint getAge() {  

return age;  

    }  

publicvoid setAge(int age) {  

this.age = age;  

    }  

public String getGender()  

  {  

return gender;  

  }  

publicvoid setGender(String gender)  

  {  

this.gender = gender;  

  }  

}  

      依據此類的package聲明,在src下建立子目錄com\abc\people(包的層次與與目錄層次一一對應),把User.java檔案存放在此目錄下。然後是建立User對象並轉換為JSON字串的程式,在這裡是AntDemo類,代碼如下:


package com.demo;  

import com.abc.people.User;  

import net.sf.json.JSONObject;  

publicclass AntDemo  

{  

publicstaticvoid main(String[] args)  

    {  

        User user = new User();  

        user.setId(10);  

        user.setName("General Patton");  

        user.setAge(60);  

        user.setGender("male");  

//建立一個JSONObject對象 

        JSONObject json = JSONObject.fromObject(user);  

//以JSON字串的形式列印 

        System.out.println(json.toString());  

    }  

} 

      與User.java類似,我們根據AntDemo所在的包,在src目錄下建立目錄com\demo,用來存放AntDemo.java檔案。本樣本需要用到的jar包如下:commons-beanutils-1.8.3.jar,commons-collections-3.2.1.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,json-lib-2.4-jdk15.jar。自然,我們需要把這些jar包複製到lib目錄下。

      接下來需要做的,就是建立ant工程的核心所在,編寫組建檔案。組建檔案預設名為build.xml,一般存放在工程的頂級目錄中,在本樣本中就是在AntDemo下。組建檔案包含一個project元素,它是頂級元素,代表一個工程。project元素至少一個target元素,而每個target元素又包含一個到多個task元素。執行ant,就是執行這些target元素;而執行每個target元素,就是依次執行它所包含的task元素。本工程的build.xml檔案如下:


<?xmlversion="1.0"encoding="ISO-8859-1"?>

<!--project元素。name屬性指定工程的名稱,default屬性  

指定ant預設執行的target,即不指定要執行的target時,ant  

執行的target。basedir指定本工程的基準目錄,這裡指定為  

目前的目錄。-->

<projectname="AntDemo"default="compile"basedir=".">

<!--property元素,定義了兩個元素,供後面以${元素名}的形式引用。-->

<propertyname="targetdir"value="classes"/>

<propertyname="srcdir"value="src"/>

<!--定義一個path元素,指定id屬性,供後面引用-->

<pathid="library">

<!--定義一個fileset元素,用於指定需要用到的檔案。dir屬性指定哪個目錄下的檔案。-->

<filesetdir="lib">

<!--指定包含lib目錄下的所有jar包-->

<includename="*.jar"/>

</fileset>

</path>

<!--定義一個target元素,name屬性為必須,用於標識此target。description屬性用於描述此target,無太大意義。depends屬性指定執行此target,所依賴的其他target。這裡指定為了運行compile這個target,需首先執行clean,copy-resources這兩個target。-->

<targetname="compile"description="Compiles the Task"depends="clean">

<!--javac是ant的核心任務(task),用於編譯JAVA來源程式。srcdir屬性指定來源程式所在的目錄,${srcdir}表明引用上面定義的名為srcdir的property元素的值。destdir指定編譯後產生的.class檔案的輸出目錄。同樣地,這裡使用了${targetdir}的形式引用了上面定義的名為targetdir的property元素的值。classpathref表明引用上面定義的id為library的path元素。在這裡,即可把它包含的.jar包載入到classpath中,而不需要像筆者以前那樣自己手動運行setclasspath命令。-->

<javacsrcdir="${srcdir}"destdir="${targetdir}"

classpathref="library"includeantruntime="no"/>

</target>

<!--定義一個名為clean的target。-->

<targetname="clean">

        <!--delete是ant的一個核心任務,用於刪除目錄或文  

        件。這裡用來刪除classes目錄。即先把以前建立的classes目錄刪除,免得舊檔案造成幹擾-->

<deletedir="${targetdir}"/>

        <!--mkdir也是一核心任務,用於建立目錄。這裡用來  

        新建立classes目錄-->

<mkdirdir="${targetdir}"/>

</target>

<targetname="copy-resources">

        <!--copy也是ant的一個核心任務,用於複製目錄或文  

        件。todir指定複製的目標目錄。本樣本未使用此任務-->

<copytodir="${targetdir}">

<!--fileset元素指定要複製的檔案集,dir屬性指定複製的來源目錄,exclude元素指定排除此目錄下的所有java源檔案,即複製除這些檔案之外的所有檔案-->

<filesetdir="${srcdir}">

<excludename="**/*.java"/>

</fileset>

</copy>

</target>

<!--depends屬性指定運行此target應先運行名為compile的target-->

<targetname="run"depends="compile">

<!--java是ant的核心任務,用於執行某個java類。classname屬性用於指定要啟動並執行類,這裡要用到類的全名fork設為true表明使用另外的JVM來運行我們的JAVA類,而不是使用運行ant的那個JVM。classpathref與上面的javac裡的一樣-->

<javafork="true"classname="com.demo.AntDemo"classpathref="library">

<!--將classes目錄載入到classpath中-->

<classpathpath="${targetdir}"/>

</java>

</target>

</project>

       開啟命令列視窗,進入到E:\DemoPrograms\AntDemo目錄下。若直接執行ant命令,ant將在目前的目錄下搜尋build.xml檔案(這是預設情況),並根據project元素的default值,執行compile這個target。若想運行run這個target,則執行命令:ant run。這裡我們來分析一下執行這個target的流程:在run這個target中,depends屬性指定應先運行compile這個target;而compile又指定應先運行clean這個target。因此,整個流程是:先運行clean,把舊的classes目錄刪除,避免它包含的舊檔案造成幹擾;然後建立一個全新的classes目錄;然後運行compile target,編譯來源程式並將.class檔案輸出到classes目錄中;最後運行run target,執行編譯好的程式。當然,在編譯和執行程式的時候,ant都根據classpath和classpathref等的值,幫我們把相應的jar包和classes目錄載入到了classpath中。執行過程如下圖所示:

       如上圖所示,ant將執行的大致步驟列印了出來。由此我們可以看出,ant首先找到組建檔案,然後按照我們在組建檔案中的定義,依次執行相應的target及其中的task。

      若想讓ant列印出執行過程中的詳細資料,可執行命令:ant -verbose run。如下圖顯示了執行clean target時的詳細步驟:

      而下圖則表明ant在調用原生java編譯器時,使用了-classpath參數,從而把我們的jar包載入進了classpath中。

 (點擊下面的“附件下載”,可下載本文的ant工程。)

【MyBatis學習筆記】系列之預備篇一:ant的下載與安裝

【MyBatis學習筆記】系列之預備篇二:ant入門樣本

【MyBatis學習筆記】系列之一:MyBatis入門樣本

【MyBatis學習筆記】系列之二:MyBatis增刪改樣本

【MyBatis學習筆記】系列之三:MyBatis的association樣本

【MyBatis學習筆記】系列之四:MyBatis association的兩種形式

【MyBatis學習筆記】系列之五:MyBatis與Spring整合樣本

【MyBatis學習筆記】系列之六:MyBatis與Spring整合樣本續

【MyBatis學習筆記】系列之七:MyBatis一對多雙向關聯

【MyBatis學習筆記】系列之八:MyBatis MapperScannerConfigurer配置

【MyBatis學習筆記】系列之九:MyBatis collection的兩種形式

【MyBatis學習筆記】系列之十:MyBatis日誌之Log4j樣本

【MyBatis學習筆記】系列之十一:MyBatis多參數傳遞之註解方式樣本

【MyBatis學習筆記】系列之十二:MyBatis多參數傳遞之預設命名方式樣本

【MyBatis學習筆記】系列之十三:MyBatis多參數傳遞之Map方式樣本

【MyBatis學習筆記】系列之十四:MyBatis中的N+1問題

【MyBatis學習筆記】系列之十五:MyBatis多參數傳遞之混合方式

【MyBatis學習筆記】系列之十六:Spring聲明式交易管理樣本

【MyBatis學習筆記】系列之十七:MyBatis多對多儲存樣本

本文出自 “肖凡的專欄” 部落格,請務必保留此出處http://legend2011.blog.51cto.com/3018495/898736

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.