Ant的幾個要點

來源:互聯網
上載者:User

說到Ant,是有一點過時了,現在maven已經被廣泛使用。

但是作為一個老牌的build工具,Ant在現存項目中仍然被廣泛使用著。所以學習它也是在所難免的。

官方使用手冊:

http://ant.apache.org/manual/

一個不錯的學習ant的網站。我的這篇文章不是ant入門,所以強烈建議沒入門的同學從這個網站開始:

http://www.exubero.com/ant/antintro-s5.html

1,Ant是Apache的開源項目

2,Ant的表現形式是XML格式的Ant script,裡面由一系列順序執行的“command”組成。所有Ant有一套自己的文法,但是非常簡單直接。

3,Ant是用java編寫的。它本質上就是一個java程式,將XML格式的Ant script解釋成實際的java程式後,運行。

有時Ant運行出錯時,可以看到低層程式拋出的java異常。

Ant script是XML的格式。它的組成要素是:

project

target -- a tartget is a set of tasks you want to execute.  you also can select which targets you want to execute when starting Ant

task

property--property是immutable的。可以把property理解成string constant,字元常量,而不是變數。一旦定義好這個字元變數後,就可以在後面的task中使用了。

Ant已經定義好了一系列的build-in properties可以直接使用。

1,例如${os.name}, 其實就是java中提供的getProperties方法提供的變數。

2,此外Ant還額外提供了一些properties。

<property file="..\project.properties" /> 我們會經常需要從一個設定檔load一系列的properties進來。

<property environment="env"/> 也會經常需要使用環境變數。

當我們在使用cruisecontrol或jenkins調用ant時,也許在ant指令碼裡需要使用一些環境變數,例如JENKINS_HOME。

Jenkins會將一些類似JENKINS_HOME設定為環境變數,然後ant中就可以用上句接收這些環境變數了。

path--這個在後面解釋

  • 編輯工具

Ant指令碼是XML的形式,可以方便的 用文字編輯器編輯。因此Ant沒有專門的編輯工具或IDE。

Notepad++就是一個不錯的編輯工具,結合它自身的全文檢索搜尋功能,高亮關鍵字功能等,可以在理解邏輯關係,編寫指令碼時省去不少麻煩。

但是在編輯複雜Ant指令碼時仍然會遇到很多問題:

1,有時邏輯上的跳轉太厲害,看一會兒就暈了。

2,無法debug。

ant執行出錯時,會返回出錯的程式碼數,而且很準確。同時有時也會拋出低層的java異常。

因此根據ant log判斷問題所在並不是很困難。

但是不能debug,仍然會經常導致難以判斷問題所在。例如雖然看起來是某行代碼出錯,但實際上是另外代碼引起的。此類問題完全只能靠經驗和閱讀ant log判斷。

3,在閱讀ant指令碼時,當遇到非core task時,常常不知道是哪個外掛程式的功能。

例如在ant中看到shellscript task,這不是一個ant提供的標準功能,也無法直接得知這是哪個第三方工具提供的功能。

但是絕大多數IDE都整合了ant。例如在eclipse中運行,debug ant script非常方便:

1,在eclipse中open file->選擇開啟一個build.xml。

2,此時eclipse的outline會顯示出ant script的結構。

3,右擊其中任何一個結構體,例如target,就可以看到run as ant build或debug as ant build了。點擊即可運行。

  • 運行

要運行Ant非常簡單,直接在命令列裡運行即可。

ant [options] [target-names]

例如:ant run targetname

  • 外掛程式

在外掛程式方面,ant無法和maven相比。但ant仍然有一些第三方工具被大量使用。

查看有哪些外掛程式:

http://ant.apache.org/external.html#IDE%20and%20Editor%20Integration

大家知道ant有很多core-task,而外掛程式則提供了更多了tasks,可在Ant script中使用。

1,首先需要把第三方類庫的jar檔案都copy到一個目錄下。如/lib

2,其次在Ant script中加入以下語句。此時path的作用就很清楚了,其實就是告訴ant應該去哪裡找jar檔案。和classpath的作用一樣。

<property name="lib.dir"     value="lib"/>
<path id="project.classpath">
   <fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

3,最後定義要使用的第三方類庫,注意classpathref的值就是我們剛剛定義的path id。
<taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="project.classpath"/>
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpathref="project.classpath"/>
    <taskdef uri="jwaresoftware.antxtras" resource="org/jwaresoftware/antxtras/install/antlib.xml" classpathref="project.classpath" />

4,然後在ant script中就可以方便的使用除了ant的core-task以外的其他tasks了。

需要注意的是:如果在ant中運行一個程式,例如自己寫的helloworld,其中使用了log4j類庫,則需要將log4j的jar加入到/lib下才能運行。

因為path的作用就是運行java程式時的classpath。不要試圖去修改CLASSPATH環境變數,這是關於使用ant的最著名的一個誤區。

所以ant外掛程式的本質就是:ant定義了一系列的介面,外掛程式是符合這些介面的java程式。當使用taskdef調用這些第三方java程式時,ant會自動load這些jar檔案,之後使用者就可以在ant script中使用這些外掛程式提供的方法了。

我見到的工具之一ant contrib:

http://ant-contrib.sourceforge.net/tasks/tasks/index.html

其中的trycatch和shellscript很有用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.