Ant脚本介绍
1、???? Ant簡介:這里引用Ant幫助文檔中對Ant的介紹:
Apache Ant是一個基于Java的構建工具。從理論上講,也是一種類似于Make的工具,只是去除了Make工具的缺點。
??????既然已經有了make, gnumake, nmake, jam以及其他的構件工具,為什么還要Ant呢?因為Ant的早期開發者發現所有以上這些工具都或多或少的有一些局限性,使得在跨平臺開發軟件成為困難。類似于Make的工具都是傳統的基于Shell的--首先進行依賴性檢查,然后執行命令。這意味著你可以輕易的通過使用或者編寫程序來擴展這些工具,以滿足不同的平臺。當然,這也意味著你將局限于特定的平臺,至少可以說局限于特定類型的平臺,例如:Unix平臺。
同時,Make文件也有一些先天的缺陷。好多人都會遇到恐怖的tab問題。Ant的最初開發者多次說“我的命令不能執行因為我在tab前面加了一個空格!”。一些工具如Jam一定程序上解決了這個問題,但仍有其它的格式問題。
?Ant與從基于命令的那些擴展開來的那些工具不同,Ant是由java類擴展的。不用編寫shell命令,而是配置基于XML的文件,形成多個任務的目標配置樹。每一個任務都是通過一個實現了一個規定接口的java類來運行的。
????ant缺少了一些直接執行shell命令的能力,如find . -name foo -exec rm {},但它給用戶提供了跨平臺的能力,可以在任何地方工作。實際上,Ant也提供了命令execute用來執行shell命令,這就是它的任務,它允許執行基于操作系統的命令。
????簡單的說,Ant是一個基于Java,并且主要用于Java工程的構建工具。Ant本意是Another Neat Tool,也就是另一種整潔的工具,取首字符就是Ant。
構建工具就是為了減少重復工作而產生的。
2、???? Ant的一些核心概念
XML:構建文件是以XML文件來描述的,采用XML格式有很多好處。這里就不一一列舉。
陳述式語法:構建文件短小精悍,且易于理解。
每個構建文件包含一個工程(project)。
每個工程包含若干個目標(target)。
目標可以依賴于其他的目標(depends)。
目標包含任務(task)。
易于使用Java語言增加新的任務---易于擴展(自定義)。
3、???? Ant中的關鍵元素介紹
Ant 的構件文件是基于xml編寫的,默認名稱為 build.xml 。為了更清楚的了解 Ant ,在這里編寫一個簡單的Ant 程序,用來展現 Ant 的功能,讓讀者對 Ant 有一個初步的了解。首先在建立一個 build.xml 文件,內容如下:
<? xml version="1.0" ?> < project name ="helloWorld"> < target name ="sayHelloWorld"> < echo message ="Hello,Amigo"/> </ target > </ project >?
Build.bat 默認執行build.xml。
下面以項目中的ant腳本為例粗略介紹一下ant腳本的執行情況及結構。腳本如下:
<?xml version="1.0" ?> <project name="TPFBL_build" default="war" basedir="."><property name="source_src" value="./src" /><property name="source_conf" value="./conf" /><property name="source_webroot" value="./WebRoot" /><property name="source_lib" value="./WebRoot/WEB-INF/lib" /><property name="source_class" value="./WebRoot/WEB-INF/classes" /><property name="source_webxml" value="./WebRoot/WEB-INF/web.xml" /><property name="TPF_jar" value="./WebRoot/WEB-INF/lib/TPF_BaseLine.jar" /><property name="TPF_war" value="./TPF_BaseLine.war" /><property name="out_lib" value="./lib" /><path id="all-libs"><fileset dir="${source_lib}"><include name="**/*.jar" /></fileset><fileset dir="${out_lib}"><include name="**/*.jar" /></fileset></path><target name="clean" description="Clean all output dirs (build, etc), and release versions"></target><target name="compile" depends="clean"><javac srcdir="${source_src}" destdir="${source_class}" excludes="junit/**" encoding="utf-8"><classpath refid="all-libs" /></javac><copy todir="${source_class}" overwrite="yes"><fileset dir="${source_conf}"></fileset></copy></target><target name="jar" depends="compile"><jar destfile="${TPF_jar}" update="true" includes="**/*.class" excludes="junit/**" basedir="${source_class}"><manifest><attribute name="Built-By" value="huawei" /></manifest></jar></target><target name="war" depends="jar"><war warfile="${TPF_war}" basedir="${source_webroot}" excludes="" webxml="${source_webxml}"><exclude name="WEB-INF/classes/com/**" /></war><delete file="${TPF_jar}" /></target><target name="usage"><echo message="" /><echo message="TPFBL Server build script" /><echo message="-----------------------------------------" /><echo message="" /><echo message="Among the available targets are:" /><echo message="" /><echo message="all jars --> create all JAR files" /><echo message="release_tomcat --> make tomcat war" /><echo message="" /><echo message="The base dir is: ${basedir}" /><echo message="-----------------------------------------" /><echo message="Java Version: ${ant.java.version}" /></target> </project>?
a)? Project元素
project 元素是 Ant 構件文件的根元素, Ant 構件文件至少應該包含一個 project 元素,否則會發生錯誤。在每個 project 元素下,可包含多個 target 元素。接下來向讀者展示一下 project 元素的各屬性。
?????? i.???? Name屬性
用于指定 project 元素的名稱。
????? ii.???? default屬性
用于指定 project 默認執行時所執行的 target 的名稱。
??? iii.???? basedir屬性
用于指定基路徑的位置。該屬性沒有指定時,使用 Ant 的構件文件的附目錄作為基準目錄。
從上面的腳本我們可以看出default="war",當運行ant命令時若為指明執行的target時默認執行name="war"的target。
此處設定了basedir=".",所以 basedir 屬性的值變成了設置的值(當前目錄)。若不設置basedir屬性,則basedir目錄則為build.xml的父目錄。
b)? Target元素
Ant 的基本執行單元,它可以包含一個或多個具體的任務。多個 target 可以存在相互依賴關系。屬性介紹:
?????? i.???? Name屬性
Ant 的基本執行單元,它可以包含一個或多個具體的任務。多個 target 可以存在相互依賴關系。
????? ii.???? Depends屬性
用于描述 target 之間的依賴關系,若與多個 target 存在依賴關系時,需要以“ , ”間隔。 Ant 會依照 depends 屬性中 target 出現的順序依次執行每個 target 。被依賴的 target 會先執行。
??? iii.???? If屬性
用于驗證指定的屬性是否存在,若不存在,所在 target 將不會被執行。
????? iv.???? Unless屬性
該屬性的功能與 if 屬性的功能正好相反,它也用于驗證指定的屬性是否存在,若不存在,所在 target 將會被執行
?????? v.???? description屬性
該屬性是關于 target 功能的簡短描述和說明。
????? vi.???? ?
c)? Property元素
該元素可看作參量或者參數的定義, project 的屬性可以通過 property 元素來設定,也可在 Ant 之外設定。若要在外部引入某文件,例如 build.properties 文件,可以通過如下內容將其引入: <property file=” build.properties”/> 。
property 元素可用作 task 的屬性值。在 task 中是通過將屬性名放在“ ${ ”和“ } ”之間,并放在 task 屬性值的位置來實現的。
?
d)? ?
4、???? Ant常用任務
在 Ant 工具中每一個任務封裝了具體要執行的功能,是 Ant 工具的基本執行單位。
a)? copy任務
該任務主要用來對文件和目錄的復制功能。現舉例如下:
Eg1. 復制單個文件:
<copy file="file.txt" tofile="copy.txt"/>Eg2. 對文件目錄進行復制:
<copy todir="../newdir/dest_dir"><fileset dir="src_dir" includes="*.jar"/> </copy>Eg3. 將文件復制到另外的目錄:
<copy file="file.txt" todir="../other/dir"/>b)? delete任務
對文件或目錄進行刪除,舉例如下:
Eg1. 刪除某個文件:
<delete file="photo/*.jar"/>Eg2. 刪除某個目錄:
<delete dir="photo"/>Eg3. 刪除所有的備份目錄或空目錄:
? ? ? ?
<delete includeEmptyDirs="true"><fileset dir="." includes="**/*.bak"/>
</delete>
c)? mkdir任務創建某個指定的目錄
<mkdir dir="build/classes" />d)? move任務 剪切文件
<move todir="some/new/dir"><fileset dir="my/src/dir"><include name="**/*.jar"/><exclude name="**/ant.jar"></fileset> </move>5、???? Ant的其他介紹略
轉載于:https://www.cnblogs.com/lltse/archive/2012/09/07/2675311.html
總結
- 上一篇: oss/bss/mss转自搜搜百科
- 下一篇: wcf 例子