學習使用Eclipse中的Ant的小實例

Ant的優勢 
Ant是Apache軟件基金會JAKARTA目錄中的一個子項目,它有如下的優勢。跨平臺性。Ant是存Java語言編寫的,所示具備很好的跨平臺性。操做簡單。Ant是由一個內置任務和可選任務組成的。Ant運行時須要一個XML文件(構建文件)。Ant經過調用target樹,就能夠執行各類task。每一個task實現了特定接口對象。因爲Ant構建文件時XML格式的文件,因此和容易維護和書寫,並且結構很清晰。Ant能夠集成到開發環境中。因爲Ant的跨平臺性和操做簡單的特色,它很容易集成到一些開發環境中去。

Ant 開發Ant的構建文件當開始一個新的項目時,首先應該編寫Ant構建文件。構建文件定義了構建過程,並被團隊開發中每一個人使用。Ant構建文件默認命名爲build.xml,也能夠取其餘的名字。只不過在運行的時候把這個命名看成參數傳給Ant。構建文件能夠放在任何的位置。通常作法是放在項目頂層目錄中,這樣能夠保持項目的簡潔和清晰。下面是一個典型的項目層次結構。 
(1) src存放文件。 
(2) class存放編譯後的文件。 
(3) lib存放第三方JAR包。 
(4) dist存放打包,發佈之後的代碼。 
Ant構建文件是XML文件。每一個構建文件定義一個惟一的項目(Project元素)。每一個項目下能夠定義不少目標(target元素),這些目標之間能夠有依賴關係。當執行這類目標時,須要執行他們所依賴的目標。每一個目標中能夠定義多個任務,目標中還定義了所要執行的任務序列。Ant在構建目標時必須調用所定義的任務。任務定義了Ant實際執行的命令。Ant中的任務能夠爲3類。 
(1) 核心任務。核心任務是Ant自帶的任務。 
(2) 可選任務。可選任務實來自第三方的任務,所以須要一個附加的JAR文件。 
(3) 用戶自定義的任務。用戶自定義的任務實用戶本身開發的任務。 

在有eclipse集成環境下ant其實不是很重要,但有些項目須要用到,另外經過eclipse來學習和理解ant是個很好的途徑,因此寫他demo總結下要點,但願可以幫到你們。

1、本人測試環境eclipse3.6已自動集成了ant環境, 因此就不用單獨下載配置ant環境了。

若是沒有eclipse集成環境能夠本身下載ant http://www.apache.org/ 下載最新的版本
解壓ant 後設置ANT_HOME, PATH中添加ANT_HOME目錄下的bin目錄(如:ANT_HOME:D:\apache-ant-1.9.2,PATH:%ANT_HOME%\bin)
測試方法:開始-->運行-->cmd進入命令行-->鍵入 ant 回車,若是看到
Buildfile: build.xml does not exist!
Build failed
說明已經完成ant的設置。

2、體驗ant 
就像每一個語言都有HelloWorld同樣,一個最簡單的應用能讓人感覺一下Ant 
1. 首先你要知道你要幹什麼,我如今想作的事情是: 
編寫一些程序->編譯它們->把它打包成jar包->把他們放在應該放置的地方->運行它們
這裏爲了簡單起見只寫一個程序以下:


[java] view plain copy 在CODE上查看代碼片派生到個人代碼片
package test;  
/** 
 * @author mijing 
 * @version 2016年3月23日 上午10:24:59 
 */  
public class Test1 {  
      
    public static void main(String[] args){  
        System.out.println("hello");  
    }  
  
}  

2. 爲了達到上邊的目的,你能夠手動的用javac 、copy 、jar、java來完成,可是考慮一下若是你有成百上千個類,在屢次調試,部署的時候,一次次的javac 、copy、jar、java那將是一份辛苦的工做。如今看看ant怎麼優雅的完成它們。
要運行ant須要有一個build.xml雖然不必定要叫這個名字,可是建議你這麼作 
下邊就是一個完整的build.xml,而後咱們來詳細的解釋每一句
[java] view plain copy 在CODE上查看代碼片派生到個人代碼片
<?xml version="1.0" encoding="UTF-8"?>  
<project name="testForAnt" default="run" basedir=".">  
<!--properities-->  
<property name="src.dir" value="src"/>  
<property name="report.dir" value="report" />  
<property name="classes.dir" value="classes" />  
<property name="lib.dir" value="lib"/>  
<property name="dest.dir" value="dest" />  
<property name="test_jar" value="test1.jar"/>  
    <!--定義classpath-->  
<path id="master-classpath">  
<fileset file="${lib.dir}/*.jar" />  
    <pathelement path="${classes.dir}"/>  
</path>  
<!--初始化任務-->  
<target name="init">  
<mkdir dir="${dest.dir}"/>  
</target>  
<!--編譯-->  
<target name="compile" depends="init" description="compile the source files">  
    <mkdir dir="${classes.dir}"/>  
    <javac srcdir="${src.dir}" destdir="${classes.dir}" >  
    <classpath refid="master-classpath"/>  
    </javac>  
</target>  
<!--測試-->  
<target name="test" depends="compile" description="run junit test">  
<mkdir dir="${report.dir}"/>  
</target>  
<!--打包成jar-->  
<target name="build" depends="compile">  
    <jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}">  
    </jar>  
</target>  
<!--  
    <target name="pack" depends="compile" description="make .jar file">  
    <jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}">         
    </jar>    
</target>-->  
<target name="run" depends="build">  
   <java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/>  
</target>  
<target name="clean" >  
   <delete dir="${test.dir}" />  
</target>  
<target name="rerun" depends="clean,run">  
   <ant target="clean" />  
   <ant target="run" />  
</target>  
</project>  

解釋:

<?xml version="1.0" encoding="UTF-8" ?> 
build.xml中的第一句話,沒有實際的意義
<project name="testForAnt" default="run" basedir="."> 
</project> 
ant的全部內容必須包含在這個裏邊,name是你給它取的名字,即工程名字,basedir顧名思意就是工做的根目錄。.表明當前目錄。default表明默認要作的事情。
<!--properities-->
<property name="src.dir" value="src"/>
<property name="report.dir" value="report" />
<property name="classes.dir" value="classes" />
<property name="lib.dir" value="lib"/>
<property name="dest.dir" value="dest" />
<property name="test_jar" value="test1.jar"/>
相似於程序中的全局變量,這樣在下面若是屢次使用某個值時,直接引用name變量名便可,在以後的修改中,也只須要修改此處的value便可。在後面的使用中,只須要使用"${name}"便可使用對應的變量。

<!--初始化任務-->
<target name="init">
<mkdir dir="${dest.dir}"/>
</target>

把你想作的每一件事情寫成一個target ,它有一個名字,depends是它所依賴的target,若與多個target存在依賴關係時,須要以「,」間隔。Ant會依照depends屬性中target出現的順序依次執行每一個target。被依賴的target會先執行。例如在本build.xml文件中,在執行這個target(例如這裏的compile)以前ant會先檢查init是否曾經被執行過,若是執行過則直接執行compile,若是沒有則會先執行它依賴的target例如這裏的init,而後在執行這個target
如咱們的計劃 
<!--編譯-->
<target name="compile" depends="init" description="compile the source files">
<mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}" >
<classpath refid="master-classpath"/>
    </javac>
</target>
<!--測試-->
<target name="test" depends="compile" description="run junit test">
<mkdir dir="${report.dir}"/>
</target>
<!--打包成jar-->
<target name="build" depends="compile">
<jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}">
</jar>
</target>
<!--
<target name="pack" depends="compile" description="make .jar file">
<jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}">

</jar>  
</target>-->
<!--運行-->
<target name="run" depends="build">
   <Java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/>
</target>

爲了避免用拷貝,咱們能夠在最開始定義好目標文件夾,這樣ant直接把結果就放在目標文件夾中了 ,即在打包的target爲build時,jarfile記爲要存儲的jar包路徑和名稱,basedir爲class文件的位置

爲了更多一點的功能體現,又加入了兩個target 
刪除生成的文件 

<target name="clean" >
   <delete dir="${test.dir}" />
</target>

再次運行,這裏顯示瞭如何在一個target裏邊調用其餘的target 

<target name="rerun" depends="clean,run">
   <ant target="clean" />
   <ant target="run" />
</target>

在eclipse中使用時,右鍵build.xml文件,選擇Run as -->Ant Build便可。

運行結果以下所示:



對於上述警告warning: 'includeantruntime' was not set,只須要在target爲compile處加上includeantruntime="on" ,即以下:

<target name="compile" depends="init" description="compile the source files">
<mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"  includeantruntime="on">
<classpath refid="master-classpath"/>
    </javac>
</target>

在命令行使用ant時,鍵入ant ,你會發現一個個任務都完成了。每次更改完代碼只須要再次鍵入ant。


有的時候咱們可能並不想運行程序,只想執行這些步驟中的某一兩個步驟,例如我只想從新部署而不想運行,鍵入 
ant build
ant中的每個任務均可以這樣調用ant + target name 
好了,這樣一個簡單的ant任務完成了。
相關文章
相關標籤/搜索