使用Ant打包工具 基本介紹

因爲使用java,javac,jar等工具進行編譯打包,即繁瑣低效又容易出錯,所以Ant出現了。html

Ant的出現就是專門爲了打包編譯java代碼的,使用以前得稍微學一下。Ant的運行起來主要是依靠配置文件(XML格式),一般命名爲build.xml。java

使用ant以前固然先裝好Java的JDK,JRE,該設的環境變量都弄好。oracle

而後在cmd窗口中輸入ant.bat。若是設置好ant_home的話,不須要絕對路徑的。本人偷懶,沒設,但照樣能夠用。eclipse

輸入ant.bat -version,查看版本號。ide

clipboard

若是正確顯示,說明安裝沒有問題了。工具

接下來的主要任務,實際上是如何編輯build.xml,由於ant所作的動做都是按照build.xml中規定的來執行的。能夠從ant官網下載幫助文檔。ui

幫助文檔很詳細,此處只是快速上手,所以簡單講解一下。spa

build.xml中的節點不少,可是如下幾個節點比較重要,理解這些節點是頗有必要的。操作系統

project,target,property,task,build-in property等.code

project是項目的意思,它是Ant中build.xml文件的根節點, 配置文件至少應該包含一個project,不然會發生錯誤。在每一個project元素下,可包含多個target元素。

project一般的寫法爲:

<project name ="jTest" default="jar" basedir=".">

意思是項目名爲jTest,默認執行jar命令,基準目錄是當前目錄。

default指的是該配置文件中要運行的默認的目標。看稍後的例子就會明白。

再說一下property節點,這個節點相似是定義了一些常量。Ant自身內建了一些預約義的屬性,好比${os.name} 的值就是當前操做系統的名字。若是某個值常常要用到的,那麼把它自定義在屬性裏面,這樣要用到這個值的時候,直接用${屬性名} 的方式就能夠得到了。內建屬性也有不少,能夠看幫助文檔瞭解更多。這裏只說明一下basedir屬性,該屬性設置了項目的基準路徑,該屬性在poject節點中定義。

property節點中,有2個特性,value和location,稍微有點區別,使用了value就不能使用location,反之亦然,若是這個屬性的值是一個路徑,那麼,若是用value的話,就必須給出絕對路徑,可是若是有location的話,能夠只給出相對路徑(相對於project中的basedir)。

target是目標的意思,它包含在project節點內部的,一個project節點能夠包含多個target。

一個target內部是定義一些動做命令,即target內定義要作些什麼任務。這些任務被稱做task。要作什麼任務必需要寫什麼樣的指令。這些指令在幫助文檔中均可以查到,這裏只列出幾個常見的。

copy,delete,mkdir,Jar,Java,Javac,看名字相似dos命令,做用也確實和dos命令的差很少。jar表示打包,java表示運行類文件,javac編譯文件。

看一個例子:

  1. <target name="compile" depends="init" 
  2.       description="compile the source " 
  3.   <!-- Compile the java code from ${src} into ${build} --> 
  4.   <javac srcdir="${src}" destdir="${build}"/> 
  5. </target

這組xml意思是target的名稱爲compile,這個能夠自定義,depends指的是依賴另外一個目標,也就是說若果要運行compile目標,必須先運行depends目標。

接下來就是javac任務,經過<javac srcdir="${src}" destdir="${build}"/>,表示對srcdir路徑下的類運行javac命令編譯,而後編譯的結果輸出到destdir中去。

${src},${build}都是屬性值。

最後看一個例子。

假設當前的要打包的原文件的目錄結構以下,把編輯好的build.xml文件放到要編譯打包的目錄中去。

  1. D:\TMPMULU 
  2. │  build.xml 
  3. │  
  4. └─src 
  5.     └─mytest 
  6.         ├─AnotherPackage 
  7.         │      ClassPrintA.java 
  8.         │      ClassPrintB.java 
  9.         │      
  10.         └─mytestpkg 
  11.                 Tj.java 

build.xml的內容以下:

  1. <?xml version="1.0" ?> 
  2. <project name ="jTest" default="jar" basedir="."><!--默認運行jar目標,可是jar目標依賴run目標, 
  3. run目標依賴compile目標,compile目標依賴clean目標,所以運行順序是clean,compile,run,jar--
  4.     <target name="clean"
  5.         <delete dir="${basedir}/build"/><!--執行刪除動做,刪除路徑在dir中定義, 
  6.         ${basedir}屬性值在project節點中定義了--
  7.     </target
  8.     <target name="compile"  depends ="clean"
  9.         <mkdir dir ="${basedir}/build/classes"/><!--mkdir,建立目錄,運行該任務前必須先運行clean目標--> 
  10.         <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/><!--運行javac,執行編譯,編譯的路徑是srcdir,編譯完成後輸出目錄是destdir--> 
  11.     </target
  12.     <target name="run" depends ="compile"
  13.           <java classname ="mytest.mytestpkg.Tj"><!--執行java命令,即運行編譯後的類,該目標必須在compile目標以後運行--> 
  14.         <classpath
  15.                     <pathelement path="${basedir}/build/classes"/><!--dos中java命令要設置classpath參數,經過這個節點設置--> 
  16.                  </classpath
  17.            </java
  18.     </target
  19.     <target name="jar" depends="run"
  20.            <jar destfile="Tj.jar" basedir="${basedir}/build/classes"><!--運行jar命令,執行打包動做,必須在run目標完成才執行。--> 
  21.                 <manifest
  22.                     <attribute name="Main-class" value="mytest.mytestpkg.Tj"/><!--建立一個manifest文件。manifest文件的概念能夠參考JAR文件規範 
  23.                     http://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#JAR Manifest--
  24.                 </manifest
  25.             </jar
  26.     </target 
  27. </project

運行ant命令。兩種方式:若是當前路徑不是D:\tmpmulu\,則能夠經過-f參數指定build.xml文件的位置。

C:\Users\Administrator>C:\ant\bin\ant.bat -f D:\tmpmulu\build.xml

若是當前路徑是D:\tmpmulu\,直接運行ant.bat就能夠了,ant會自動尋找build.xml.

clipboard[1]

運行後,界面上會顯示出每一個目標的運行狀況,run目標中,會輸出程序打印的內容。而且在basedir下,生成一個Tj.jar的包。運行後的文件結構以下:

  1. D:\TMPMULU 
  2. │  build.xml 
  3. │  Tj.jar 
  4. │  
  5. ├─build 
  6. │  └─classes 
  7. │      └─mytest 
  8. │          ├─AnotherPackage 
  9. │          │      ClassPrintA.class 
  10. │          │      ClassPrintB.class 
  11. │          │      
  12. │          └─mytestpkg 
  13. │                  Tj.class 
  14. │                  
  15. └─src 
  16.     └─mytest 
  17.         ├─AnotherPackage 
  18.         │      ClassPrintA.java 
  19.         │      ClassPrintB.java 
  20.         │      
  21.         └─mytestpkg 
  22.                 Tj.java 

藉助一些IDE工具,好比eclipse等,能夠沒必要手動編輯build.xml,工具會自動幫咱們生成的。

本文出自 「一隻博客」 博客,請務必保留此出處http://cnn237111.blog.51cto.com/2359144/1130502

相關文章
相關標籤/搜索