Ant 学习笔记
- http://ant.apache.org/? 下載zip包 ant,解壓到 某個盤,比如D:\apache-ant-1.9.4
- 配置環(huán)境變量??,bin加入path,測試是否成功,則表示配置成功。
- 初步使用?編寫簡單的build.xml(默認(rèn)的,Ant會自動的在當(dāng)前目錄下去尋找這個文件,如果找的就去構(gòu)建,如果找不到就會提示:build.xml does not exist!
- <?xml version="1.0" encoding="utf-8"?>
- <project default="init">
- <target name="init">
- <mkdir dir="helloworld" />
- </target>
- </project> 命令行 運(yùn)行ant ,然后就創(chuàng)建helloworld文件夾?
- Ant沒有定義自己的自定義語法;相反,它的生成文件是使用XML編寫的。存在Ant能夠理解的預(yù)定義XML元素,而且還可以定義新的元素來擴(kuò)展Ant的功能。每個生成文件由單個project元素組成,該元素又包含一個或多個target元素。一個目標(biāo)(target)是生成過程中已定義的一個步驟,它執(zhí)行任意數(shù)量的操作,比如編譯一組源文件。并且這些操作本身是由其他專用的任務(wù)標(biāo)簽執(zhí)行的
- 頂級的project元素需要包含一個default屬性,如果在Ant被調(diào)用時沒有指定目標(biāo),這個屬性將指定要執(zhí)行的目標(biāo)。然后需要使用target元素來定義該目標(biāo)本身。
- Ant中的屬性類似編程語言中的變量,它們都具有名稱和值。然而與通常的變量不同,一經(jīng)設(shè)置,Ant中是屬性就不可更改;它們是不可變的,就像Java語言中的String對象。這起初看起來似乎很有限制性,但這樣是為了遵循Ant的簡單原則:畢竟,它是一個生成工具,而非一種編程語言。如果嘗試給某個現(xiàn)有的屬性賦予一個新的值,這不會看作是一個錯誤,但是該屬性仍然會保留其現(xiàn)有的值
- 定義與使用屬性
- <property name=”metal” value=”beryllium”/>
- 為了在生成文件的其他部分引用這個屬性,使用以下語法:
- ${metal}
- 例如,為了使用這樣一個值,它是另一個屬性的值的組成部分,將標(biāo)簽寫成下面這樣
- <property name=”metal-database” value=”${metal}.db”/>
- 屬性經(jīng)常用于引用文件系統(tǒng)上的文件或目錄,但是對于使用不同路徑分隔符(例如,/與|的平臺來說,這樣可能再跨越不同平臺時導(dǎo)致問題。Ant的location屬性專門設(shè)計(jì)用于以平臺無關(guān)的方式包含文件系統(tǒng)路徑。像下面這樣使用location替代value:
- <property name=”database-file” location=”archive/database/${metal}.db”/>
- 用于location屬性的路徑分隔字符將被轉(zhuǎn)換為當(dāng)前平臺的正確格式;而且由于文件名是相對的,它被認(rèn)為是相對于項(xiàng)目的基目錄。我們同樣可以容易地寫為下面這樣:
- <property name=”database-file” location=”archive\database\${metal}.db”/>
- 這個標(biāo)簽的兩個版本都會在不同的平臺具有相同的行為
- <?xml version="1.0" encoding="utf-8"?>
- <project name="initProject" default="package" basedir=".">
- <property name="hello" value="hello123"/>
- <property name="welcome" value="welcome123"/>
- <target name="init">
- </target>
- <target name="preprocess" depends="init">
- <mkdir dir="${hello}"/>
- <mkdir dir="${welcome}"/>
- </target>
- <target name="compile" depends="init,preprocess"/>
- <target name="package" depends="compile"/>
- </project> 例子,可以生成兩個文件夾
- 默認(rèn)情況下,Ant尋找一個名為build.xml的文件。當(dāng)然,也可以使用其他名稱的生成文件,在那樣的情況下,你需要對Ant使用: ant -f test.xml ?(-f 是-file簡寫形式)
- -D<property>=<value> ? use value for given property ?
定義依賴關(guān)系:
生成一個項(xiàng)目一般需要許多步驟--例如首先要編譯源代碼,然后將它打包為Java歸檔文件(Java?Archive?File,JAR)。這其中許多步驟都具有清楚定義的順序--例如,在編譯器從源代碼生成類文件之前,您不能打包類文件。與順序指定target所不同的是,Ant采用一種更靈活的方法來定義依賴關(guān)系。每個目標(biāo)的定義依據(jù)的是它能夠執(zhí)行之前必須完成的其他所有目標(biāo)。這是使用target元素的depends屬性來實(shí)現(xiàn)的
例如:
<target?name=”init”/>
<target?name=”preprocess”?depends=”init”/>
<target?name=”compile”?depends=”init,preprocess”/>
<target?name=”package”?depends=”compile”/>
這種方法允許您執(zhí)行項(xiàng)目任何階段的生成過程;Ant會首先執(zhí)行已定義的先決階段。在上面的例子中,如果讓Ant完成complie步驟,它將判斷出需要首先執(zhí)行init和和preprocess這兩個目標(biāo)。Init目標(biāo)不依賴其他任何目標(biāo),因此它將首先被執(zhí)行。然后Ant檢查preprogress?target,發(fā)現(xiàn)它依賴init目標(biāo);由于已經(jīng)執(zhí)行后者,Ant不會再次執(zhí)行它,因此開始執(zhí)行preprocess目標(biāo)。最后可以執(zhí)行compile任務(wù)本身。
注意目標(biāo)出現(xiàn)在生成文件中的順序并不重要:執(zhí)行順序是由depends屬性唯一確定的。
- Javac任務(wù)的一個重要的特點(diǎn)在于,它僅編譯那些它認(rèn)為需要編譯的源文件。如果某個類文件已經(jīng)存在,并且對應(yīng)的源文件自從該類文件生成以來還沒改變過,那么該源文件就不會被重新編譯。Javac任務(wù)的輸出顯示了實(shí)際被編譯的源文件的數(shù)目。這種行為刻畫了Ant的許多任務(wù)的特點(diǎn):如果某個任務(wù)能夠確定所請求的操作不需要執(zhí)行,那么該操作就會被跳過。創(chuàng)建JAR文件在編譯Java源文件之后,結(jié)果類文件通常被打包到一個JAR文件中,這個文件類似zip歸檔文件,它可以指定該JAR文件的屬性下面是Ant中jar任務(wù)的一個簡單使用例子:<jar destfile=”package.jar” basedir=”classes”/>這將創(chuàng)建一個名為package.jar的jar文件,并把classes目錄中所有文件添加到其中(JARwe文件能夠包含任意類型的文件,而不只是類文件)。此處沒有指定清單文件,因此Ant將提供一個基本的清單文件Mainifest屬性允許指定一個用作JAR文件的清單的文件。清單文件的內(nèi)容還可以使用mainifest任務(wù)在生成文件中指定。這個任務(wù)能夠向文件系統(tǒng)寫入一個清單文件,或者能夠?qū)嶋H嵌套在Jar之內(nèi),以便一次性地創(chuàng)建清單文件和JAR文件。
-在生成環(huán)境中使用當(dāng)前時間和日期,以某種方式標(biāo)記某個生成任務(wù)的輸出,以便記錄它是何時生成的,這經(jīng)常是可取的。這可能涉及編輯一個文件,以便插入一個字符串來指定日期和時間,或?qū)⑦@個信息合并到JAR或者zip文件的文件名中-這種需要是通過簡單但是非常有用的tstamp任務(wù)來解決的。這個任務(wù)通常在某次生成過程開始時調(diào)用,比如在一個init目標(biāo)中。這個任務(wù)不需要屬性,許多情況下只需要<tstamp/>就足夠了在調(diào)用tstamp任務(wù)之后,我們能夠根據(jù)日期命名該JAR文件,如下所示:<tstamp><format property="TODAY" pattern="yyyyMMdd" locale="cn" /></tstamp><jar destfile=”package-${DSTAMP}.jar” basedir=”classes”/> ?// output ?package-20150411.jar
基本操作創(chuàng)建和刪除目錄-最基本的文件系統(tǒng)操作之一就是創(chuàng)建目錄或文件夾。做這項(xiàng)工作的任務(wù)名稱為mkdir-<mkdir dir=”archive/metals/zinc”/>-mkdir任務(wù)的另一個有用的特性是它的如下能力:在父目錄還不存在時創(chuàng)建它們-如果目標(biāo)目錄已經(jīng)存在,mkdir任務(wù)不會發(fā)出錯誤消息,而只是假設(shè)它的工作已經(jīng)完成,從而什么也不做刪除目錄-<delete dir=”archive/metals/zinc”/>-這將刪除指定的目錄連同它包含的所有文件以及子目錄。使用file屬性而不是dir屬性可以指定要刪除的單個文件
復(fù)制移動文件目錄<copy file=”src/Test.java” tofile=”src/TestCopy.java”/>還可以使用move來執(zhí)行重命名操作而不是拷貝文件<move file=”src/Test.java” tofile=”src/TestCopy.java”/>另一個常用的文件系統(tǒng)操作是將文件復(fù)制或在移動到另一個目錄<copy file=”src/Test.java” todir=”archive”/><move file=”src/Test.java” tofile=”archive”/>默認(rèn)情況下,Ant僅輸出它執(zhí)行的移動和復(fù)制操作的摘要,包括諸如已移動或復(fù)制的文件的數(shù)量等信息。如果想看到更詳細(xì)的信息,包括涉及的文件名稱等,可以將verbose屬性設(shè)置為true
來自為知筆記(Wiz)
轉(zhuǎn)載于:https://www.cnblogs.com/liubo6/p/4491158.html
總結(jié)
- 上一篇: Catalina.stop: Conn
- 下一篇: js综合