學習Ant編譯指令碼
之前有了解到JAVA的編譯指令碼是Ant,當然現在有出來一個更加牛的Maven。其實指令碼這東西都是差不多的,我們先一步一步來學習Ant,以後再學習Maven、Rake。
之前在做Openfire(即時通訊伺服器)時使用過Ant,但是一直沒有時間去了解這個指令碼的具體工作原理。最近遇到一個問題:通過Eclipse編譯一個很大的Android工程非常的慢,因為裡面的資源比較多,而Eclipse的ADT需要對所有的資源進行重新的整理生成資源號,生成資源壓縮包。而且,有時候需要編譯幾個版本,需要對一個檔案的引數進行調整,經常會忘記這個事情,導致給客戶的APK不能使用。再則對檔案的“頻繁修改”使得git commit的東西多了,不理由對版本歷史的檢視。於是,決定利用點業餘的時間好好學習一下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,就是進行了再次的抽象,把我們要做的事情簡單化了。但是,我們一定要知其然知其所以然。一定要搞明白背後的原理,而不是照著別人的命令敲就是了,那是很沒出息的。而且萬一遇到個啥問題也沒有辦法自己解決,又要去網上“跪求”了。
相關文件
http://ant.apache.org/manual/
官方的文件是很好的學習材料,當然由於是英文的,寫的也比較全面,花的時間會比較多。如果你是想速成的話,可以找個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>
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>
看看別人的文章
到此,也學習差不多了,當然這裡的差不多是指入門。實際的應用還有很多細節的問題需要不斷的查詢資料。現在我們就看看,別人學習Ant的情況,來Google一下。- http://blog.csdn.net/pq5326/article/details/337242
- http://www.blogjava.net/atealxt/archive/2008/07/17/ant_study_note.html
- http://www.blogjava.net/bingle/archive/2007/01/23/95479.html
- http://lingate.iteye.com/blog/28651
自己仔細看看,有哪些自己知道了的,哪些掌握了的,哪些還需要學習的。有疑問的地方可以跟他們探討一下。
Google時候還發現Ant方面的經典書籍《Ant Definitive Guide》這些可以作為後續的深入學習材料,或者解決問題的好幫手。
總結
如果你跟這上面的步驟進行學習,相信一定會有所地的。同時,這裡面不單讓你學會了Ant,更加重要的是告訴你學習一個知識點的方法。
相關文章
- Ant-design dropdown 原始碼學習原始碼
- FFmpeg學習之一(FFmpeg原始碼編譯)原始碼編譯
- 如何學習 PHP 原始碼 – 從編譯開始PHP原始碼編譯
- Per指令碼學習指令碼
- ffmpeg iOS平臺編譯 指令碼註釋iOS編譯指令碼
- Java的指令碼機制、編譯器APIJava指令碼編譯API
- 常用指令碼學習手冊——Bat指令碼指令碼BAT
- 彙編學習筆記07——BCD碼及調整指令筆記
- PostgreSQL原始碼學習 win10原始碼編譯安裝SQL原始碼Win10編譯
- Kubernetes原始碼學習之一:下載和編譯原始碼原始碼編譯
- 【編譯openjdk學習筆記】編譯JDK筆記
- Verilog 編譯指令簡介編譯
- JavascriptAST編譯器的研究學習JavaScriptAST編譯
- 修改gradle指令碼,加速spring4.1原始碼編譯構建速度Gradle指令碼Spring原始碼編譯
- 彙編學習筆記之轉移指令筆記
- 6502 指令譯碼器
- 編譯實踐學習 Part1編譯
- 編譯實踐學習 Part2編譯
- 編譯實踐學習 Part5編譯
- shell 指令碼如何編寫-致初學者指令碼
- Linux命令和shell指令碼學習Linux指令碼
- shell指令碼學習筆記-1指令碼筆記
- 【網路安全】Shell 指令碼學習指令碼
- shell和bash指令碼命令學習指令碼
- Spring原始碼學習01:IntelliJ IDEA2019.3編譯Spring5.3.x原始碼Spring原始碼IntelliJIdea編譯
- 高效學習Linux核心——核心模組編譯Linux編譯
- 學習筆記分享之彙編---2.彙編指令/語法筆記
- Linux學習之路(三)Shell指令碼初探Linux指令碼
- Elsa V3學習之指令碼指令碼
- 【學習】Linux Shell指令碼程式設計Linux指令碼程式設計
- go學習--->開始編碼Go
- 手撕Vue-編譯指令資料Vue編譯
- 輕鬆學會原始碼編譯Vim 8.0原始碼編譯
- 油猴指令碼編寫指令碼
- 編寫git指令碼.shGit指令碼
- 簡單分析AutoIt指令碼的反編譯和程式碼格式化問題指令碼編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 前端學習(2366):條件編譯跨端相容前端編譯跨端
- JS學習系列 01 - 編譯原理和作用域JS編譯原理