日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
ApacheAnt對決Make:實戰(zhàn)Java構(gòu)建工具

一談到英語單詞Ant,人們很自然的想到螞蟻。而一談到另一個單詞Make,人們也會很自然想到構(gòu)建工具。有誰會將這兩個詞關(guān)聯(lián)起來呢?那么Ant究竟有什么神奇之處呢?本文會為您揭曉答案。

為渭城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及渭城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、渭城網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

什么是Ant

Apache Ant是一個基于Java的構(gòu)建(Build)工具。理論上講,類似Unix/Linux C程序員經(jīng)常使用的Make工具。與Make相比,Ant完全由Java實現(xiàn),具有跨平臺的好處。

Ant的命名來源

至于Ant的稱呼,頗有點意思。據(jù)Ant原作者James Duncan Davidson本人介紹,Ant是“Another Neat Tool”的縮寫,意思是“另一個簡潔的工具”,意思是比Make更簡潔,適用。不過,人們更愿意接受Ant即“螞蟻”這樣的理解。眾所周知,螞蟻是動物世界赫赫有名的建筑師(ants do an extremely good job at building things);螞蟻體格雖小,但力氣超強(ants are very small and can carry a weight dozens of times their own)。

Ant的歷史

說起Ant,就不得不說另一個Apache開源項目Tomcat。Tomcat作為輕量級Web容器,早已聲名鵲起。最初,Ant其實是Tomcat的一部分,Ant的唯一目的就是build Tomcat。Ant原作者James Duncan Davidson也是Tomcat的創(chuàng)始人。

不久,很多Java開源項目意識到Ant的簡潔適用,更重要的是彌補Makefiles的不足。自從Jakarta以及Apache項目開始采用Ant以來, 作為構(gòu)建工具,Ant就像病毒一樣,傳播到各種各樣的項目。

2000年1月,Ant脫離了Tomcat,成為獨立的Apache開源項目,由獨立的CVS模塊維護,正式更名為Apache Ant。2000年7月,Apache Ant的***個版本1.1正式亮相。截至筆者發(fā)稿時,Apache Ant的***版本為1.8.2,發(fā)布日期為2010年12月27日。點擊http://ant.apache.org/bindownload.cgi下載***版本。

Ant的安裝

在簡單介紹Ant的相關(guān)背景之后,我們以Windows平臺為例,介紹如何安裝Ant。

為順利安裝Ant,請確保Java版本在1.4以上,推薦1.5。為確保Ant功能全部可用,請使用JDK,不推薦使用JRE。

***種方式是選擇Windows installer for Apache Ant自動安裝,默認Ant安裝目錄為C:\Program Files\WinAnt 。并自動創(chuàng)建環(huán)境變量ANT_HOME與PATH,指向Ant根目錄。這種方式的特點是簡單、迅速。

第二種方式是手工安裝。具體方法如下:

1. 下載。如前述所,從ANT Binary Page(http://ant.apache.org/bindownload.cgi)下載Ant二進制安裝包a.zip。解壓后目錄如下:

bin – 公共的二進制文件,以及運行腳本

build – 臨時創(chuàng)建的文件,如.class文件

dist – 目標輸出文件,如.jar文件

docs – 文檔

lib – 需要導出的jar包

src – 源文件

2. 指定ANT_HOME變量。打開控制面板 -> 系統(tǒng) –> 高級 –> 環(huán)境變量。創(chuàng)建用戶變量ANT_HOME,值為zip包解壓路徑。例如:

變量名:”ANT_HOME”

變量值:"C:\Program Files\Apache Software Foundation\apache-ant-1.8.1"

3. 將ANT_HOME加入PATH變量。

變量名:" PATH"

變量值:" ;%ANT_HOME%\bin"

4. 創(chuàng)建用戶變量JAVA_HOME,值為Java安裝目錄。例如:

變量名:”JAVA_HOME”

變量值:"C:\Program Files\Java\jdk1.6.0_21"

創(chuàng)建用戶變量JAVA_HOME,值為Java安裝目錄。JAVA_HOME = C:\Program Files\java\jdk1.6.0_02

5. 將JAVA_HOME加入PATH變量。

變量名:" PATH"

變量值:" ;%JAVA_HOME%\bin"

相比于前一種,第二種方式更加靈活。

無論哪種方式,可以使用下列辦法確保安裝成功,

◆  使用javac –version檢查Java環(huán)境是否正確。返回值應(yīng)為:javac 1.6.0_21

◆  使用ant –version檢查Ant環(huán)境是否正確。返回值應(yīng)為:Apache Ant version 1.8.1 compiled on April 30 2010。

如圖所示:

如果遇到安裝錯誤,請參見Apache Ant官方網(wǎng)站:http://ant.apache.org/problems.html。

***個Ant示例

假設(shè)我們創(chuàng)建一個Java工程HelloWorld,將源文件.java存放在src目錄,編譯后的字節(jié)碼.class存放在bin目錄,對應(yīng)的jar包存放在exe目錄,結(jié)構(gòu)如下圖:

HelloWorld.java清單如下:

 
 
 
 
  1. public class HelloWorld { 
  2.   public static void main(String[] args) { 
  3.   System.out.println(" Hello World "); 
  4.   } 
  5.   } 

我們分別采用命令行與Ant兩種不同的build方式。

1. 命令行

首先,創(chuàng)建src目錄:

md src

其次,創(chuàng)建bin目錄,編譯并運行:

md bin
javac -sourcepath src -d bin\ src\HelloWorld.java
java -cp bin HelloWorld

再次,創(chuàng)建exe目錄,創(chuàng)建jar包,包含創(chuàng)建manifest文件,exe目錄,jar打包。一個命令就可以搞定:

echo Main-Class: HelloWorld>MonManifest md exe jar cfm exe\HelloWorld.jar MonManifest -C bin .

***,運行工程:

java -jar exe\HelloWorld.jar

#p#

2. Ant

Ant的構(gòu)建腳本文件build file是使用XML語言編寫,下文我們簡稱為build.xml。build.xml包含一個標準的根節(jié)點Project,表示一個工程。每個build文件只允許定義一個Project元素。Project定義至少1個或多個Target,表示不同的模塊。而Target又是一些列Task的集合,而每一個Task是一段可執(zhí)行的代碼。三者的關(guān)系如圖表示。更多細節(jié),請參見Apache Ant官方網(wǎng)站:http://ant.apache.org。

我們使用Ant來build工程HelloWorld。build.xml包含4個target:clean,compile,jar,run。

◆  clean

clean清除所有的編譯文件以及相關(guān)目錄,這里為目錄bin以及exe。

< target name = ” clean ” >
< delete dir = ” bin ” / >
< delete dir = ” exe ” / >
< /target >

◆  compile

compile創(chuàng)建目錄bin,編譯src目錄源文件,生成的.class文件放在bin目錄。

< target name = ” compile ” >
< mkdir dir = ” bin ” / >
< javac srcdir = ” src ” destdir = ” bin ” / >
< /target >

◆  jar

jar創(chuàng)建目錄exe,打包jar。使用manifest元素可輕松創(chuàng)建manifest文件。

< target name = ” jar ” >
< mkdir dir = ” exe ” / >
< jar destfile = ” exe/HelloWorld.jar ” basedir = ” bin ” >
< manifest >
< attribute name = ” Main-Class ” value = ” HelloWorld ” / >
< /manifest >
< /jar >
< /target >

◆  run

run 運行jar。

< target name = ” run ” >
< java jar = ” exe/HelloWorld.jar ” fork = ” true ” / >
< /target >

需要指出的是,以上4個target的執(zhí)行順序上有依賴關(guān)系的。例如jar依賴于compile,run依賴于jar。Ant提供了屬性depends來描述target之間的依賴關(guān)系。舉個例子,假設(shè)執(zhí)行D,由于D依賴于C,C依賴于B,B依賴于A,因此,從順序上,先執(zhí)行A,其次B,然后C,***D。每個Target最多只能被執(zhí)行一遍。

< target name = ” A ” / >
< target name = ” B ” depends = “ A “ / >
< target name = ” C ” depends = “ B “ / >
< target name = ” D ” depends = “ C,B,A “ / >

對于我們的工程HelloWorld??梢赃\行下列Ant命令。

ant clean
ant compile
ant jar
ant run

當然,可以簡單地運行

ant run

build.xml清單如下:

 
 
 
 
  1. < project default = ” run ” > 
  2. < property name = ” src.dir ” value = ” src ” / > 
  3. < property name = ” bin.dir ” value = ” bin ” / > 
  4. < property name = ” jar.dir ” value = ” exe ” / > 
  5. < property name = ” main-class ” value = ” HelloWorld ” / > 
  6. < target name = ” clean ” > 
  7. < delete dir = ” ${bin.dir} ” / > 
  8. < delete dir = ” ${jar.dir} ” / > 
  9. < echo message = ” nettoyage termine ” / > 
  10. < / target > 
  11. < target name = ” compile ” depends = ” clean ” > 
  12. < mkdir dir = ” ${bin.dir} ” / > 
  13. < javac srcdir = ” ${src.dir} ” destdir = ” ${bin.dir} ” / > 
  14. < echo message = ” compilation terminee ” / > 
  15. < / target > 
  16. < target name = ” jar ” depends = ” compile ” > 
  17. < mkdir dir = ” ${jar.dir} ” / > 
  18. < jar destfile = ” ${jar.dir}/sdf.jar ” basedir = ” ${bin.dir} ” > 
  19. < manifest > 
  20. < attribute name = ” Main-Class ” value = ” ${main-class} ” / > 
  21. < / manifest > 
  22. < / jar > 
  23. < echo message = ” Creation du fichier Jar terminee ” / > 
  24. < / target > 
  25. < target name = ” run ” depends = ” jar ” > 
  26. < java jar = ” ${jar.dir}/sdf.jar ” fork = ” true ” / > 
  27. < / target > 
  28. < / project > 

Eclipse提供Ant視圖,可以很方便查看與編輯Ant腳本,如圖:

Ant API

Ant的強大之處在于,不僅可以調(diào)用Ant腳本進行各種文件部署、管理工作,也可以調(diào)用Ant豐富的API,甚至擴展Ant API編程。舉幾個例子:

1. 創(chuàng)建目錄:

 
 
 
 
  1. Project prj=new Project(); 
  2. Mkdir mkdir=new Mkdir(); 
  3. mkdir.setProject(prj); 
  4. mkdir.setDir(new File("src")); 
  5. mkdir.execute(); 

2. 將class文件打成jar包

 
 
 
 
  1. Project prj = new Project(); 
  2. Jar jar = new Jar(); 
  3. jar.setProject(prj); 
  4. jar.setDestFile(new File("HelloWorld.jar")); 
  5. FileSet fileSet = new FileSet(); 
  6. fileSet.setProject(prj); 
  7. fileSet.setDir(new File("bin")); 
  8. fileSet.setIncludes("**/*.class"); 
  9. jar.addFileset(fileSet); 
  10. jar.execute(); 

創(chuàng)建自己的Task

Apache Ant允許用戶自定義Task,步驟如下:

1. 創(chuàng)建一個類,繼承org.apache.tools.ant.Task

2. 對于每一個Attribute,需要實現(xiàn)標準的Java bean規(guī)范的set方法。

3. 如果創(chuàng)建的Task需要其它其它的子Task,則需要實現(xiàn)org.apache.tools.ant.TaskContainer接口。

4. 如果擴展的Task需要支持Text,需要實現(xiàn)方法public void addText(String)。

5. 對于每個嵌套的元素,實現(xiàn)create, add或者addConfigured方法。

6. 實現(xiàn)public void execute()方法。

7. 在build.xml中使用引用自定義Task。

舉個例子,我們寫一個自定義的Task,目的是在Java控制臺打印一條消息。該Task只有一個屬性,稱為message。

源代碼MyTask.java

 
 
 
 
  1. import org.apache.tools.ant.BuildException; 
  2.   import org.apache.tools.ant.Task; 
  3.   public class MyTask extends Task { 
  4.   private String msg; 
  5.   // The method executing the task 
  6.   public void execute() throws BuildException { 
  7.   System.out.println(msg); 
  8.   } 
  9.   // The setter for the "message" attribute 
  10.   public void setMessage(String msg) { 
  11.   this.msg = msg; 
  12.   } 
  13.   } 

對應(yīng)的build.xml

 
 
 
 
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  

算上MyTask的編譯,完整的Ant腳本為:

 
 
 
 
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. classname="MyTask" 
  9. classpath="build"/> 
  10.  
  11.  
  12.  
  13.  
  14.  

#p#

Ant重要標簽列表

標簽

每個構(gòu)建文件對應(yīng)一個項目。 標簽時構(gòu)建文件的根標簽。它可以有多個內(nèi)在屬性,如下:

(1) default表示默認的運行目標,這個屬性是必須的。

(2) basedir表示項目的基準目錄。

(3) name表示項目名。

(4) description表示項目的描述。

標簽

一個項目標簽下可以有一個或多個target標簽。一個target標簽可以依賴其他的target標簽。一個target只能被執(zhí)行一次, 即使有多個target依賴于它。如果沒有if或unless屬性,target總會被執(zhí)行。target標簽其屬性如下。:

(1).name表示標明,這個屬性是必須的。

(2).depends表示依賴的目標。

(3)if表示僅當屬性設(shè)置時才執(zhí)行。

(4)unless表示當屬性沒有設(shè)置時才執(zhí)行。

(5)description表示項目的描述。

標簽

該標簽用于創(chuàng)建一個目錄,它有一個屬性dir用來指定所創(chuàng)建的目錄名,其代碼如下:

 
 
 
 
  1.  

標簽

該標簽用來生成一個JAR文件,其屬性如下。

(1) destfile表示JAR文件名。

(2) basedir表示被歸檔的文件名。

(3) includes表示別歸檔的文件模式。

(4) exchudes表示被排除的文件模式。 

標簽

該標簽用于編譯一個或一組java文件,其屬性如下。

(1).srcdir表示源程序的目錄。

(2).destdir表示class文件的輸出目錄。

(3).include表示被編譯的文件的模式。

(4).excludes表示被排除的文件的模式。

(5).classpath表示所使用的類路徑。

(6).debug表示包含的調(diào)試信息。

(7).optimize表示是否使用優(yōu)化。

(8).verbose 表示提供詳細的輸出信息。

(9).fileonerror表示當碰到錯誤就自動停止。

標簽

該標簽用來執(zhí)行編譯生成的.class文件,其屬性如下。

(1).classname 表示將執(zhí)行的類名。

(2).jar表示包含該類的JAR文件名。

(3).classpath所表示用到的類路徑。

(4).fork表示在一個新的虛擬機中運行該類。

(5).failonerror表示當出現(xiàn)錯誤時自動停止。

(6).output 表示輸出文件。

(7).append表示追加或者覆蓋默認文件。

標簽

該標簽用于刪除一個文件或一組文件,其屬性如下。

(1).file表示要刪除的文件。

(2).dir表示要刪除的目錄。

(3).includeEmptyDirs 表示指定是否要刪除空目錄,默認值是刪除。

(4).failonerror 表示指定當碰到錯誤是否停止,默認值是自動停止。

(5).verbose表示指定是否列出所刪除的文件,默認值為不列出。

標簽

該標簽用于文件或文件集的拷貝,其屬性如下。

(1).file 表示源文件。

(2).tofile 表示目標文件。

(3).todir 表示目標目錄。

(4).overwrite 表示指定是否覆蓋目標文件,默認值是不覆蓋。

(5).includeEmptyDirs 表示制定是否拷貝空目錄,默認值為拷貝。

(6).failonerror 表示指定如目標沒有發(fā)現(xiàn)是否自動停止,默認值是停止。

(7).verbose 表示制定是否顯示詳細信息,默認值不顯示。

Ant調(diào)試

Eclipse 3.1及以上版本開始支持Ant調(diào)試。以下是Eclipse用于調(diào)試的具體步驟。

首先,在Ant腳本的target中設(shè)置斷點,這個與Java文中設(shè)置斷點幾乎沒有區(qū)別,如下圖所示。但是Ant腳本不支持Hit Count與條件斷點。

接下來,通過Debug As –> Ant Build啟動Ant調(diào)試。與Java調(diào)試一樣,調(diào)試光標停在斷點處,如下圖所示。Ant支持單步斷點執(zhí)行命令Step Over與 Run to Line。

除此之外,我們可以使用Debug視圖查看變量值,如圖所示。

如果是遠程調(diào)試,需要在Ant腳本中添加相應(yīng)的參數(shù),如下: 

 
 
 
 
  1.  
  2.  
  3.  
  4. ... 
  5.  

總結(jié)

總之,Ant具有兩個突出的優(yōu)點。一方面,作為一個Java應(yīng)用,Ant具有跨平臺的特點。另一方面,Ant腳本是標準的XML,可讀性好。Eclipse對Ant腳本也提供強大的內(nèi)置支持。從這個角度來說,Apache Ant無論是作為Another Neat Tool,或者螞蟻,筆者都欣然接受。

原文鏈接:http://tech.it168.com/a2011/1206/1284/000001284384.shtml


當前標題:ApacheAnt對決Make:實戰(zhàn)Java構(gòu)建工具
當前URL:http://www.5511xx.com/article/codioec.html