Ant 開發(fā)Ant的構(gòu)建文件當(dāng)開始一個(gè)新的項(xiàng)目時(shí),首先應(yīng)該編寫Ant構(gòu)建文件。構(gòu)建文件定義了構(gòu)建過程抢肛,并被團(tuán)隊(duì)開發(fā)中每個(gè)人使用。Ant構(gòu)建文件默認(rèn)命名為build.xml碳柱,也可以取其他的名字捡絮。只不過在運(yùn)行的時(shí)候把這個(gè)命名當(dāng)作參數(shù)傳給Ant。構(gòu)建文件可以放在任何的位置士聪。一般做法是放在項(xiàng)目頂層目錄中锦援,這樣可以保持項(xiàng)目的簡潔和清晰。下面是一個(gè)典型的項(xiàng)目層次結(jié)構(gòu)剥悟。
(1) src存放文件灵寺。
(2) class存放編譯后的文件。
(3) lib存放第三方JAR包区岗。
(4) dist存放打包略板,發(fā)布以后的代碼。
Ant構(gòu)建文件是XML文件慈缔。每個(gè)構(gòu)建文件定義一個(gè)唯一的項(xiàng)目(Project元素)叮称。每個(gè)項(xiàng)目下可以定義很多目標(biāo)(target元素),這些目標(biāo)之間可以有依賴關(guān)系藐鹤。當(dāng)執(zhí)行這類目標(biāo)時(shí)瓤檐,需要執(zhí)行他們所依賴的目標(biāo)。每個(gè)目標(biāo)中可以定義多個(gè)任務(wù)娱节,目標(biāo)中還定義了所要執(zhí)行的任務(wù)序列挠蛉。Ant在構(gòu)建目標(biāo)時(shí)必須調(diào)用所定義的任務(wù)。任務(wù)定義了Ant實(shí)際執(zhí)行的命令肄满。Ant中的任務(wù)可以為3類谴古。
(1) 核心任務(wù)。核心任務(wù)是Ant自帶的任務(wù)稠歉。
(2) 可選任務(wù)掰担。可選任務(wù)實(shí)來自第三方的任務(wù)怒炸,因此需要一個(gè)附加的JAR文件带饱。
(3) 用戶自定義的任務(wù)。用戶自定義的任務(wù)實(shí)用戶自己開發(fā)的任務(wù)阅羹。
1<project>.標(biāo)簽
每個(gè)構(gòu)建文件對(duì)應(yīng)一個(gè)項(xiàng)目纠炮。標(biāo)簽時(shí)構(gòu)建文件的根標(biāo)簽月趟。它可以有多個(gè)內(nèi)在屬性,就如代碼中所示恢口,其各個(gè)屬性的含義分別如下孝宗。
(1) default表示默認(rèn)的運(yùn)行目標(biāo),這個(gè)屬性是必須的耕肩。
(2) basedir表示項(xiàng)目的基準(zhǔn)目錄因妇。
(3) name表示項(xiàng)目名。
(4) description表示項(xiàng)目的描述猿诸。
每個(gè)構(gòu)建文件都對(duì)應(yīng)于一個(gè)項(xiàng)目婚被,但是大型項(xiàng)目經(jīng)常包含大量的子項(xiàng)目,每一個(gè)子項(xiàng)目都可以有自己的構(gòu)建文件梳虽。
2. <target>標(biāo)簽
一個(gè)項(xiàng)目標(biāo)簽下可以有一個(gè)或多個(gè)target標(biāo)簽址芯。一個(gè)target標(biāo)簽可以依賴其他的target標(biāo)簽。例如窜觉,有一個(gè)target用于編譯程序谷炸,另一個(gè)target用于聲稱可執(zhí)行文件。在生成可執(zhí)行文件之前必須先編譯該文件禀挫,因策可執(zhí)行文件的target依賴于編譯程序的target旬陡。Target的所有屬性如下。
(1) name表示標(biāo)明语婴,這個(gè)屬性是必須的描孟。
(2) depends表示依賴的目標(biāo)。
(3) if表示僅當(dāng)屬性設(shè)置時(shí)才執(zhí)行砰左。
(4) unless表示當(dāng)屬性沒有設(shè)置時(shí)才執(zhí)行匿醒。
(5) description表示項(xiàng)目的描述。
Ant的depends屬性指定了target的執(zhí)行順序缠导。Ant會(huì)依照depends屬性中target出現(xiàn)順序依次執(zhí)行每個(gè)target青抛。在執(zhí)行之前,首先需要執(zhí)行它所依賴的target酬核。程序中的名為run的target的depends屬性compile,而名為compile的target的depends屬性是prepare适室,所以這幾個(gè)target執(zhí)行的順序是prepare->compile->run嫡意。一個(gè)target只能被執(zhí)行一次,即使有多個(gè)target依賴于它捣辆。如果沒有if或unless屬性蔬螟,target總會(huì)被執(zhí)行。
3.<mkdir>標(biāo)簽
該標(biāo)簽用于創(chuàng)建一個(gè)目錄汽畴,它有一個(gè)屬性dir用來指定所創(chuàng)建的目錄名旧巾,其代碼如下:通過以上代碼就創(chuàng)建了一個(gè)目錄耸序,這個(gè)目錄已經(jīng)被前面的property標(biāo)簽所指定。
4.<jar>標(biāo)簽
該標(biāo)簽用來生成一個(gè)JAR文件鲁猩,其屬性如下坎怪。
(1) destfile表示JAR文件名。
(2) basedir表示被歸檔的文件名廓握。
(3) includes表示別歸檔的文件模式搅窿。
(4) exchudes表示被排除的文件模式。
5.<javac>標(biāo)簽
該標(biāo)簽用于編譯一個(gè)或一組java文件隙券,其屬性如下:
(1).srcdir表示源程序的目錄男应。
(2).destdir表示class文件的輸出目錄。
(3).include表示被編譯的文件的模式娱仔。
(4).excludes表示被排除的文件的模式沐飘。
(5).classpath表示所使用的類路徑。
(6).debug表示包含的調(diào)試信息牲迫。
(7).optimize表示是否使用優(yōu)化耐朴。
(8).verbose 表示提供詳細(xì)的輸出信息。
(9).fileonerror表示當(dāng)碰到錯(cuò)誤就自動(dòng)停止恩溅。
6.<java>?標(biāo)簽
該標(biāo)簽用來執(zhí)行編譯生成的.class文件隔箍,其屬性如下。
(1).classname 表示將執(zhí)行的類名脚乡。
(2).jar表示包含該類的JAR文件名蜒滩。
(3).classpath所表示用到的類路徑。
(4).fork表示在一個(gè)新的虛擬機(jī)中運(yùn)行該類奶稠。
(5).failonerror表示當(dāng)出現(xiàn)錯(cuò)誤時(shí)自動(dòng)停止俯艰。
(6).output 表示輸出文件。
(7).append表示追加或者覆蓋默認(rèn)文件锌订。
7. <delete>標(biāo)簽
該標(biāo)簽用于刪除一個(gè)文件或一組文件竹握,去屬性如下:
(1).file表示要?jiǎng)h除的文件。
(2).dir表示要?jiǎng)h除的目錄辆飘。
(3).includeEmptyDirs 表示指定是否要?jiǎng)h除空目錄啦辐,默認(rèn)值是刪除。
(4).failonerror 表示指定當(dāng)碰到錯(cuò)誤是否停止蜈项,默認(rèn)值是自動(dòng)停止芹关。
(5).verbose表示指定是否列出所刪除的文件,默認(rèn)值為不列出紧卒。
8.<copy>標(biāo)簽
該標(biāo)簽用于文件或文件集的拷貝侥衬,其屬性如下。
(1).file 表示源文件。
(2).tofile 表示目標(biāo)文件轴总。
(3).todir 表示目標(biāo)目錄直颅。
(4).overwrite 表示指定是否覆蓋目標(biāo)文件,默認(rèn)值是不覆蓋怀樟。
(5).includeEmptyDirs 表示制定是否拷貝空目錄功偿,默認(rèn)值為拷貝。
(6).failonerror 表示指定如目標(biāo)沒有發(fā)現(xiàn)是否自動(dòng)停止漂佩,默認(rèn)值是停止脖含。
(7).verbose 表示制定是否顯示詳細(xì)信息,默認(rèn)值不顯示投蝉。