1. 程式人生 > >學習Ant編譯指令碼

學習Ant編譯指令碼

瞭解Ant的歷史,What's Ant

原來Ant是Apache的一個子專案http://ant.apache.org/,當然也就是開源的。Ant是用Java寫的,目前的主要用途是編譯Java的應用。Ant會包含很多的Task和Type,第三方有一些庫提供了一些這樣的Task和Type主要是方面我們在特定場景的使用。Google一下,果然發現以Android方面的antlibhttp://code.google.com/p/autoandroid/wiki/AndroidAnt。所謂的這些lib,就是進行了再次的抽象,把我們要做的事情簡單化了。但是,我們一定要知其然知其所以然。一定要搞明白背後的原理,而不是照著別人的命令敲就是了,那是很沒出息的。而且萬一遇到個啥問題也沒有辦法自己解決,又要去網上“跪求”了。

相關文件

官方的文件是很好的學習材料,當然由於是英文的,寫的也比較全面,花的時間會比較多。如果你是想速成的話,可以找個demo來學習,然後依葫蘆畫瓢。在工作中經常為了趕專案經常要做這樣的事情。但是我不提倡這種方便麵的學習方法。

官方文件介紹瞭如何安裝Ant,相信這對大家沒有問題,有疑問再聯絡我。

接下來,我們跟這文件一步一步來學習。

Hello World

在上面的官方文件中有Hello World的例項,叫我們一步一步的跟著學習。http://ant.apache.org/manual/ -->Tutorials --> Hello World with Apache Ant。你也可以先看看Ant的幾個基本的概念,下面會做簡單的介紹。熟悉或者簡單瞭解這些基本的概念對學習hello world有幫助,或者交替的看,反覆的看。將這兩者理解好了,就入門了,甚至你比一些copy著用了很多年Ant的人還厲害。因為你瞭解其中的原理,你可以通過這些原理分析出現的問題。


基本概念

Projects
每一個build.xml只有一個Project,Project表示一個工程吧,裡面可以知道這個工程的全域性屬性。這個比較固定,照寫就可以。如下:
<project name="helloWorld" basedir="." default="main">
......
<target name="main" depends="clean,run"/>
</project>
熟悉name順便定義一個就行。basedir指定相對路徑的基礎,這裡是指定了當前路徑。default是指如果執行ant時不指定哪一個target時,就使用這個預設的。
Targets
target翻譯過來就是目標吧,每一個project都會包含很多的目標,例如編譯/compile、執行/run、清理clean、打包/package等等。特別是打包,我們可能要針對不同的客戶打不同的包給他們,這時候就顯得得心應手了。例子如下:
<target name="run" depends="jar">
       <java fork="true" classname="${main-class}">
           <classpath>
               <path refid="classpath"/>
               <path location="${jar.dir}/${ant.project.name}.jar"/>
           </classpath>
       </java>
</target>

屬性name是這個target的名字,可以被其它的target引用。我們看depends的熟悉,jar就是另外一個target的name。depends是指定target之間的依賴關係,這樣就省去我們很多的麻煩。例如,在run之前,需要先執行compile這個target,否則就沒有東西可以run了。通過depends的指定,我們在想run的時候就run吧,Ant自然會根據我們的depends先執行其它的依賴,省心省力。
Tasks

而要實現一個目標,需要執行很多的任務的,因此Tasks是被包含在Targets裡面的。從上面的例子可以看到,<java />這個元素就是一個task。這是編寫build.xml的關鍵,因為這個才是真正被執行的。Ant內建了很多的Task,如複製檔案,刪除資料夾,壓縮檔案等等,下面的連結http://ant.apache.org/manual/tasklist.html包含了所有的。平時使用的時候可以隨時檢視。

Properties
property相對於C++裡面的巨集吧,或者Java中的constant。這是一個key-value的形式出現的。這個key可以在其它地方中引用,通過${key}這種形式。如:
<property name="build.dir" location="build"/>
<target name="init">
      <mkdir dir="${build.dir}"/> //建立路徑
</target>
這個${build.dir}現在是代表了build這個相對路徑資料夾,我還可以在不改變build.xml的情況下,通過Ant的執行引數來改變這個值。如Ant -Dbuild.dir = build-debug。

看看別人的文章

到此,也學習差不多了,當然這裡的差不多是指入門。實際的應用還有很多細節的問題需要不斷的查詢資料。現在我們就看看,別人學習Ant的情況,來Google一下。
自己仔細看看,有哪些自己知道了的,哪些掌握了的,哪些還需要學習的。有疑問的地方可以跟他們探討一下。

Google時候還發現Ant方面的經典書籍《Ant Definitive Guide》這些可以作為後續的深入學習材料,或者解決問題的好幫手。

總結

如果你跟這上面的步驟進行學習,相信一定會有所地的。同時,這裡面不單讓你學會了Ant,更加重要的是告訴你學習一個知識點的方法。