由於使用java,javac,jar等工具進行編譯打包,即繁瑣低效又容易出錯,因此Ant出現了。
Ant的出現就是專門為了打包編譯java代碼的,使用之前得稍微學一下。Ant的運行起來主要是依靠配置文件(XML格式),通常命名為build.xml。
使用ant之前當然先裝好Java的JDK,JRE,該設的環境變量都弄好。
然后在cmd窗口中輸入ant.bat。如果設置好ant_home的話,不需要絕對路徑的。本人偷懶,沒設,但照樣可以用。
輸入ant.bat -version,查看版本號。
如果正確顯示,說明安裝沒有問題了。
接下來的主要任務,其實是如何編輯build.xml,因為ant所做的動作都是按照build.xml中規定的來執行的。可以從ant官網下載幫助文檔。
幫助文檔很詳細,此處只是快速上手,因此簡單講解一下。
build.xml中的節點很多,但是以下幾個節點比較重要,理解這些節點是很有必要的。
project,target,property,task,build-in property等.
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編譯文件。
看一個例子:
- <target name="compile" depends="init"
- description="compile the source " >
- <!-- Compile the java code from ${src} into ${build} -->
- <javac srcdir="${src}" destdir="${build}"/>
- </target>
這組xml意思是target的名稱為compile,這個可以自定義,depends指的是依賴另一個目標,也就是說若果要運行compile目標,必須先運行depends目標。
接下來就是javac任務,通過<javac srcdir="${src}" destdir="${build}"/>,表示對srcdir路徑下的類運行javac命令編譯,然后編譯的結果輸出到destdir中去。
${src},${build}都是屬性值。
最后看一個例子。
假設當前的要打包的原文件的目錄結構如下,把編輯好的build.xml文件放到要編譯打包的目錄中去。
- D:\TMPMULU
- │ build.xml
- │
- └─src
- └─mytest
- ├─AnotherPackage
- │ ClassPrintA.java
- │ ClassPrintB.java
- │
- └─mytestpkg
- Tj.java
build.xml的內容如下:
- <?xml version="1.0" ?>
- <project name ="jTest" default="jar" basedir="."><!--默認運行jar目標,但是jar目標依賴run目標,
- run目標依賴compile目標,compile目標依賴clean目標,因此運行順序是clean,compile,run,jar-->
- <target name="clean">
- <delete dir="${basedir}/build"/><!--執行刪除動作,刪除路徑在dir中定義,
- ${basedir}屬性值在project節點中定義了-->
- </target>
- <target name="compile" depends ="clean">
- <mkdir dir ="${basedir}/build/classes"/><!--mkdir,創建目錄,運行該任務前必須先運行clean目標-->
- <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/><!--運行javac,執行編譯,編譯的路徑是srcdir,編譯完成后輸出目錄是destdir-->
- </target>
- <target name="run" depends ="compile">
- <java classname ="mytest.mytestpkg.Tj"><!--執行java命令,即運行編譯后的類,該目標必須在compile目標之后運行-->
- <classpath>
- <pathelement path="${basedir}/build/classes"/><!--dos中java命令要設置classpath參數,通過這個節點設置-->
- </classpath>
- </java>
- </target>
- <target name="jar" depends="run">
- <jar destfile="Tj.jar" basedir="${basedir}/build/classes"><!--運行jar命令,執行打包動作,必須在run目標完成才執行。-->
- <manifest>
- <attribute name="Main-class" value="mytest.mytestpkg.Tj"/><!--創建一個manifest文件。manifest文件的概念可以參考JAR文件規范
- http://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#JAR Manifest-->
- </manifest>
- </jar>
- </target >
- </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.
運行后,界面上會顯示出每個目標的運行情況,run目標中,會輸出程序打印的內容。並且在basedir下,生成一個Tj.jar的包。運行后的文件結構如下:
- D:\TMPMULU
- │ build.xml
- │ Tj.jar
- │
- ├─build
- │ └─classes
- │ └─mytest
- │ ├─AnotherPackage
- │ │ ClassPrintA.class
- │ │ ClassPrintB.class
- │ │
- │ └─mytestpkg
- │ Tj.class
- │
- └─src
- └─mytest
- ├─AnotherPackage
- │ ClassPrintA.java
- │ ClassPrintB.java
- │
- └─mytestpkg
- Tj.java
借助一些IDE工具,比如eclipse等,可以不必手動編輯build.xml,工具會自動幫我們生成的。
本文出自 “一只博客” 博客,請務必保留此出處http://cnn237111.blog.51cto.com/2359144/1130502


![clipboard[1] clipboard[1]](/image/aHR0cDovL2ltZzEuNTFjdG8uY29tL2F0dGFjaG1lbnQvMjAxMzAyLzEvMjM1OTE0NF8xMzU5Njc5MDc0SFRqay5wbmc=.png)