日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ant 使用指南

發(fā)布時(shí)間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ant 使用指南 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概述

ant 是一個(gè)將軟件編譯、測(cè)試、部署等步驟聯(lián)系在一起加以自動(dòng)化的一個(gè)工具,大多用于Java環(huán)境中的軟件開(kāi)發(fā)。在實(shí)際軟件開(kāi)發(fā)中,有很多地方可以用到ant。

?

開(kāi)發(fā)環(huán)境:

System:Windows

JDK:1.6+

IDE:eclipse

ant:1.9.1

?

Email:hoojo_@126.com

Blog:http://blog.csdn.net/IBM_hoojo

http://hoojo.cnblogs.com/

?

二、優(yōu)點(diǎn)

ant 是Apache軟件基金會(huì)JAKARTA目錄中的一個(gè)子項(xiàng)目,它有以下的優(yōu)點(diǎn): ? ? ?
1、跨平臺(tái)性:Ant是純Java語(yǔ)言編寫的,所以具有很好的跨平臺(tái)性。 ? ? ?
2、操作簡(jiǎn)單:Ant是由一個(gè)內(nèi)置任務(wù)和可選任務(wù)組成的,用ant任務(wù)就像是在dos中寫命令行一樣。Ant運(yùn)行時(shí)需要一個(gè)XML文件(構(gòu)建文件)。 Ant通過(guò)調(diào)用target樹(shù),就可以執(zhí)行各種task。每個(gè)task實(shí)現(xiàn)了特定接口對(duì)象。 ? ? ?
3、維護(hù)簡(jiǎn)單、可讀性好、集成簡(jiǎn)單:由于Ant構(gòu)建文件 時(shí)XML格式的文件,所以很容易維護(hù)和書寫,而且結(jié)構(gòu)很清晰。Ant可以集成到開(kāi)發(fā)環(huán)境中。由于Ant的跨平臺(tái)性和操作簡(jiǎn)單的特點(diǎn),它很容易集成到一些開(kāi)發(fā)環(huán)境中去。

?

三、安裝和配置

1、下載ant,http://mirror.esocc.com/apache//ant/binaries/apache-ant-1.9.1-bin.zip

2、解壓zip壓縮包,將壓縮包放置你要放置的目錄。我這里放置在D:\apache-ant-1.9.1,目錄結(jié)構(gòu)如下:

bin是ant的程序運(yùn)行入口,如果沒(méi)有配置ANT_HOME的情況下,可以通過(guò)bin目錄中的bat程序進(jìn)行運(yùn)行build任務(wù)。

如:在cmd中運(yùn)行ant.bat就可以執(zhí)行程序,當(dāng)然你選擇要當(dāng)前目錄中存在一個(gè)build.xml(build.xml是默認(rèn)的ant執(zhí)行文件,當(dāng)然你可以指定其他文件)

etc目錄中存放的都是一些xsl的輸出模板,創(chuàng)建一個(gè)加強(qiáng)的導(dǎo)出各種任務(wù)的XML輸出,使你的build文件擺脫過(guò)時(shí)的警告

lib目錄中存放的是ant程序需要依賴的jar包

manual目錄是ant程序的幫助文檔

3、在我的電腦 –> 右鍵屬性 –> 高級(jí)系統(tǒng)配置 -> 環(huán)境變量 中配置ant

新建系統(tǒng)變量 ANT_HOME = D:\apache-ant-1.9.1

這樣環(huán)境變量就配置好了,但前提你需要配置jdk的環(huán)境變量。如果你沒(méi)有配置jdk的環(huán)境變量,那么請(qǐng)你先配置好jdk變量。jdk環(huán)境配置方法如下:

(1),安裝JDk到其默認(rèn)目錄:C:\Program Files\Java\jdk1.5.0_05 (沒(méi)有jdk去官方下載一個(gè)) ? ? ?
C:\Program Files\Java\jdk1.5.0 ? ? ?
作用:告訴系統(tǒng)JVM在什么地方

(2),右擊我的電腦,選屬性,高級(jí),環(huán)境變量 ? ? ?
(3),在系統(tǒng)變量欄點(diǎn)新建,出現(xiàn)新建系統(tǒng)變量對(duì)話框,在變量名中填上JAVA_HOME ,變量值:C:\Program Files\Java\jdk1.5.0_05 ? ? ?
(4),確定后在系統(tǒng)變量(S)欄再新建一個(gè)環(huán)境變量CLASSPATH,變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(開(kāi)頭的dot和;不能少) ? ? ?
(5),確定后在系統(tǒng)變量(S)欄查找并選中變量為Path的選項(xiàng),點(diǎn)編輯在變量值(V)的末尾添加: ? ? ?
%JAVA_HOME%\bin?????

如果沒(méi)有找到PATH變量,自己新建一個(gè)! ? ? ?
如果你不想每次運(yùn)行都要cmd到class所在目錄然后執(zhí)行java命令,可以把所有的class文件放到統(tǒng)一的目錄組織下,然后將此目錄也追加到CLASSPATH下。

測(cè)試代碼如下:

public class Test { ? ? ?
??? public static void main(String[] args) { ? ? ?
????????????? System.out.println("Hello World!"); ? ? ?
??? } ? ? ?
}

用記事本編輯后存為Test.java(文件名與類名相同)文件,打開(kāi)命令行窗口, ? ? ?
cd到文件所在目錄下: ? ? ?
javac Test.java?????????????????????? //編譯命令 ? ? ?
java Test??????????????????????????????? //執(zhí)行程序 ? ? ?
如果輸出為:Hello World!?????? OK,配置完畢,否則,重新檢查。

?

四、測(cè)試ant

在啟動(dòng),運(yùn)行cmd的dos窗口中輸入ant,如圖:

如果出現(xiàn)這個(gè),那么恭喜你安裝成功了!否則就失敗了,檢查下前面的步驟有沒(méi)有錯(cuò)誤。上面命令會(huì)執(zhí)行ant程序,ant默認(rèn)執(zhí)行build.xml中的任務(wù),這里在Administrator目錄中沒(méi)有這個(gè)文件。

如果安裝失敗,你看看是否存在一些情況:

1、沒(méi)有配置JAVA_HOME 或配置錯(cuò)誤,并且JAVA_HOME\bin\java.exe存在

2、沒(méi)有配置ANT_HOEM 或配置錯(cuò)誤,并且ANT_HOME\bin\ant.bat存在

3、檢查你的環(huán)境變量的path變量中,有木有配置...;%ANT_HOME%\bin;...

%PATH%=...maybe-other-entries...;%ANT_HOME%\bin;...maybe-other-entries... ? ? ?

?

五、ant的運(yùn)行時(shí)環(huán)境

ant在運(yùn)行命令的時(shí)候,有時(shí)候會(huì)出現(xiàn)一些公園的jar庫(kù)。這些庫(kù)會(huì)存在于每個(gè)ant工程中,那么這個(gè)時(shí)候我們可以把這個(gè)jar包放到ant_home\lib目錄中作為全局的庫(kù)使用。

如果你不想“污染”原始的ant程序,那么你可以把jar包放在當(dāng)前windows用戶的目錄下,具體位置應(yīng)該是${user.home}/.ant/lib 下。沒(méi)有以上目錄可以手動(dòng)建立。

如果你只是臨時(shí)要添加lib,又不想把lib添加到當(dāng)前ant工程中。你可以在運(yùn)行ant程序的時(shí)候指定依賴的lib參數(shù)。

同時(shí),你還可以在當(dāng)前build工程的classpath目錄中添加你的工程依賴jar包。

六、ant命令

語(yǔ)法元素說(shuō)明如下: ? ? ?
-help ? ? ?
顯示描述ant 命令及其選項(xiàng)的幫助信息 ? ? ?
-projecthelp ? ? ?
顯 示包含在構(gòu)建文件中的、所有用戶編寫的幫助文檔。即為各個(gè)<target>中description 屬性的文本,以及包含在<description>元素中的任何文本。將有description 屬性的目標(biāo)列為主目標(biāo)(Main target),沒(méi)有此屬性的目標(biāo)則列為子目標(biāo)(Subtarget)。 ? ? ?
-version ? ? ?
要求ant 顯示其版本信息,然后退出。 ? ? ?
-quiet ? ? ?
抑制并非由構(gòu)建文件中的echo 任務(wù)所產(chǎn)生的大多數(shù)消息。 ? ? ?
-verbose ? ? ?
顯示構(gòu)建過(guò)程中每個(gè)操作的詳細(xì)消息。此選項(xiàng)與-debug 選項(xiàng)只能選其一。 ? ? ?
-debug ? ? ?
顯示Ant 和任務(wù)開(kāi)發(fā)人員已經(jīng)標(biāo)志為調(diào)試消息的消息。此選項(xiàng)與-verbose 只能選其一。 ? ? ?
-emacs ? ? ?
對(duì)日志消息進(jìn)行格式化,使它們能夠很容易地由Emacs 的shell 模式(shellmode)所解析;也就是說(shuō),打印任務(wù)事件,但并不縮排,在其之前也沒(méi)有[taskname]。 ? ? ?
-logfile filename ? ? ?
將日志輸出重定向到指定文件。 ? ? ?
-logger classname ? ? ?
指定一個(gè)類來(lái)處理Ant 的日志記錄。所指定的類必須實(shí)現(xiàn)了org.apache.tools.ant.BuildLogger 接口。 ? ? ?
-listener classname ? ? ?
為Ant 聲明一個(gè)監(jiān)聽(tīng)類,并增加到其監(jiān)聽(tīng)者列表中。在Ant與IDE或其他Java程序集成時(shí),此選項(xiàng)非常有用??梢蚤喿x第六章以了解有關(guān)監(jiān)聽(tīng)者的更多信息。必須將所指定的監(jiān)聽(tīng)類編寫為可以處理Ant 的構(gòu)建消息接發(fā)。 ? ? ?
-buildfile filename ? ? ?
指定Ant 需要處理的構(gòu)建文件。默認(rèn)的構(gòu)建文件為build.xml。 ? ? ?
-Dproperty=value ? ? ?
在命令行上定義一個(gè)特性名-值對(duì)。 ? ? ?
-find filename ? ? ?
指 定Ant 應(yīng)當(dāng)處理的構(gòu)建文件。與-buildfile 選項(xiàng)不同,如果所指定文件在當(dāng)前目錄中未找到,-find 就要求Ant 在其父目錄中再進(jìn)行搜索。這種搜索會(huì)繼續(xù)在其祖先目錄中進(jìn)行,直至達(dá)到文件系統(tǒng)的根為止,在此如果文件還未找到,則構(gòu)建失敗。 ? ? ?
-atuoproxy jdk1.5以上的可以使用代理設(shè)置 ? ? ?
-nouserlib 運(yùn)行ant時(shí)不使用用戶lib中的jar包 ? ? ?
-nice 設(shè)計(jì)主線程優(yōu)先級(jí) ? ? ?
-logfile 使用指定的log日志 ? ? ?
-noinput 不允許交互輸入 ? ? ?
-keep-going, -k 執(zhí)行不依賴于所有目標(biāo) ? ? ?
-propertyfile 加載所有屬性配置文件 -d 屬性文件優(yōu)先

<project?default="all">

? ?

????<property?name="pro_a"?value="a?value"?/>

? ?

????<property?name="pro_b"?value="b?value"?/>

? ?


? ?

????<path?id="rt.path">

? ?

????????<pathelement?location="${java.home}/jre/lib/rt.jar"?/>

? ?

????</path>

? ?


? ?

????<target?name="all">

? ?

????????<javac?srcdir=".">

? ?

????????????<classpath?refid="a.path"?/>

? ?

????????</javac>

? ?

????</target>

? ?

</project>

注意: ? ?
● 所有構(gòu)建文件都要有<project>元素,而且至少有一個(gè)<target> 元素。 ? ?
● 對(duì)于<project> 元素的default 屬性并不一定需要默認(rèn)值。 ? ?
● 構(gòu)建文件并不一定要被命名為build.xml。不過(guò)build.xml 是ant 要搜索的默認(rèn)文件名。 ? ?
● 每個(gè)構(gòu)建文件只能有一個(gè)<project> 元素。

在cmd窗口中進(jìn)入到當(dāng)前build.xml目錄

ant ? ?
在當(dāng)前目錄下的build.xml運(yùn)行Ant,執(zhí)行缺省的target。

ant -buildfile build-test.xml ? ?
在當(dāng)前目錄下的build-test.xml運(yùn)行Ant,執(zhí)行缺省的target。

ant -buildfile build-test.xml clean ? ?
在當(dāng)前目錄下的build-test.xml運(yùn)行Ant,執(zhí)行一個(gè)叫做clean的target。

ant -buildfile build-test.xml -Dbuild=build/classes clean ? ?
在當(dāng)前目錄下的build-test.xml運(yùn)行Ant,執(zhí)行一個(gè)叫做clean的target,并設(shè)定build屬性的值為build/classes。

七、ant腳本:使用節(jié)點(diǎn)、元素和屬性、命令指令

1、project 節(jié)點(diǎn)元素

project 元素是 Ant 構(gòu)件文件的根元素, Ant 構(gòu)件文件至少應(yīng)該包含一個(gè) project 元素,否則會(huì)發(fā)生錯(cuò)誤。在每個(gè) project 元素下,可包含多個(gè) target 元素。接下來(lái)向讀者展示一下 project 元素的各屬性。 ? ?
● name 屬性:用于指定 project 元素的名稱。 ? ?
● default 屬性:用于指定 project 默認(rèn)執(zhí)行時(shí)所執(zhí)行的 target 的名稱。 ? ?
● basedir 屬性:用于指定基路徑的位置。該屬性沒(méi)有指定時(shí),使用 Ant 的構(gòu)件文件的附目錄作為基準(zhǔn)目錄。

<?xml?version="1.0"??>

? ?

<project?name="ant-project"?default="print-dir"?basedir=".">

? ?

????<target?name="print-dir">

? ?

????????<echo?message="The?base?dir?is:?${basedir}"?/>

? ?

????</target>

? ?

</project>

從上例可以看出,在這里定義了default 屬性的值為print-dir,即當(dāng)運(yùn)行ant 命令時(shí),如果沒(méi)有指明執(zhí)行的target,則將執(zhí)行默認(rèn)的target(print-dir)。此外,還定義了basedir 屬性的值為 “.” ,.表示當(dāng)前目錄,進(jìn)入當(dāng)前目錄后運(yùn)行ant 命令,得一下結(jié)果:

?

2、target節(jié)點(diǎn)元素

target為ant的基本執(zhí)行單元或是任務(wù),它可以包含一個(gè)或多個(gè)具體的單元/任務(wù)。多個(gè)target 可以存在相互依賴關(guān)系。它有如下屬性: ? ?
● name 屬性:指定 target 元素的名稱,這個(gè)屬性在一個(gè) project 元素中是唯一的。我們可以通過(guò)指定 target 元素的名稱來(lái)指定某個(gè) target 。 ? ?
● depends 屬性:用于描述 target 之間的依賴關(guān)系,若與多個(gè) target 存在依賴關(guān)系時(shí),需要以“,”間隔。 Ant 會(huì)依照 depends 屬性中 target 出現(xiàn)的順序依次執(zhí)行每個(gè) target ,被依賴的target 會(huì)先執(zhí)行。 ? ?
● if 屬性:用于驗(yàn)證指定的屬性是存在,若不存在,所在 target 將不會(huì)被執(zhí)行。 ? ?
● unless 屬性:該屬性的功能與 if 屬性的功能正好相反,它也用于驗(yàn)證指定的屬性是否存在,若不存在,所在 target 將會(huì)被執(zhí)行。 ? ?
● description 屬性:該屬性是關(guān)于 target 功能的簡(jiǎn)短描述和說(shuō)明。 ? ?
示例:

<?xml?version="1.0"??>

? ?

<project?name="ant-target"?default="print">

? ?

????<target?name="version"?if="ant.java.version">

? ?

????????<echo?message="Java?Version:?${ant.java.version}"?/>

? ?

????</target>

? ?

????<target?name="print"?depends="version"?unless="docs">

? ?

????????<description>

? ?

????????????a?depend?example!

? ?

????????</description>

? ?

????????<echo?message="The?base?dir?is:?${basedir}"?/>

? ?

????</target>

? ?

</project>

從以下結(jié)果后可以看到,我們運(yùn)行的是名為 print的target ,由于它依賴于version這個(gè)target任務(wù),所以 version將首先被執(zhí)行,同時(shí)因?yàn)橄到y(tǒng)配置了JDK,所以 ant.java.version 屬性存在,執(zhí)行了version,輸出信息:"[echo] Java Version: 1.6 ",version執(zhí)行完畢后,接著執(zhí)行 print,因?yàn)閐ocs不存在,而unless屬性是在不存在時(shí)進(jìn)入所在target 的,由此可知 print得以執(zhí)行,輸出信息:"[echo] The base dir is:D:\Workspace\AntExample\build"。

?

3、property屬性節(jié)點(diǎn)元素

property元素可看作參量或者參數(shù)的定義,project 的屬性可以通過(guò) property 元素來(lái)設(shè)定,也可在 Ant 之外設(shè)定。若要在外部引入某文件,例如 build.properties 文件,可以通過(guò)如下內(nèi)容將其引: ? ?
<property file="build.properties"/> ? ?
property 元素可用作 task 的屬性值。在 task 中是通過(guò)將屬性名放在${屬性名}之間,并放在 task 屬性值的位置來(lái)實(shí)現(xiàn)的。 ? ?
Ant 提供了一些內(nèi)置的屬性,它能得到的系統(tǒng)屬性的列表與 Java 文檔中 System.getProperties() 方法得到的屬性一致,這些系統(tǒng)屬性可參考 sun 網(wǎng)站的說(shuō)明。同時(shí), Ant 還提供了一些它自己的內(nèi)置屬性,如下: ? ?
basedir: project 基目錄的絕對(duì)路徑;??
ant.file: buildfile的絕對(duì)路徑,上例中ant.file值為D:\Workspace\AntExample\build; ? ?
ant.version: Ant 的版本信息,本文為1.8.1 ; ? ?
ant.project.name: 當(dāng)前指定的project的名字,即前文說(shuō)到的project的name屬性值; ? ?
ant.java.version: Ant 檢測(cè)到的JDK版本,本文為 1.6 。

舉例說(shuō)明如下:

<project?name="ant-project"?default="example">

? ?

????<property?name="name"?value="jojo"?/>

? ?

????<property?name="age"?value="25"?/>

? ?

????<target?name="example">

? ?

????????<echo?message="name:?${name},?age:?${age}"?/>

? ?

????</target>

? ?

</project>

上例中用戶設(shè)置了名為name 和age的兩個(gè)屬性,這兩個(gè)屬性設(shè)置后,在下文中可以通過(guò) ${name} 和 ${age} 分別取得這兩個(gè)屬性值。

4、copy命令

copy主要用來(lái)對(duì)文件和目錄的復(fù)制功能。舉例如下: ? ?
● 復(fù)制單個(gè)文件: ? ?
<copy file="old.txt" tofile="new.txt"/>

● 對(duì)文件目錄進(jìn)行復(fù)制: ? ?
<copy todir="../dest_dir"> ? ?
??? <fileset dir="src_dir"/> ? ?
</copy>

● 將文件復(fù)制到另外的目錄: ? ?
<copy file="src.txt" todir="c:/base"/>

5、delete命令

對(duì)文件或目錄進(jìn)行刪除,舉例如下:

● 刪除某個(gè)文件:???
<delete file="/res/p_w_picpath/cat.jpg"/>

● 刪除某個(gè)目錄:???
<delete dir="/res/p_w_picpath"/>

● 刪除所有的jar文件或空目錄: ? ?
<delete includeEmptyDirs="true"> ? ?
?????? <fileset dir="." includes="**/*.jar"/> ? ?
</delete>

6、 mkdir 命令

創(chuàng)建目錄。 ? ?
<mkdir dir="/home/philander/build/classes"/>

7、 move 命令

移動(dòng)文件或目錄,舉例如下: ? ?
● 移動(dòng)單個(gè)文件: ? ?
<move file="sourcefile" tofile=”destfile”/>

● 移動(dòng)單個(gè)文件到另一個(gè)目錄: ? ?
<move file="sourcefile" todir=”movedir”/>

● 移動(dòng)某個(gè)目錄到另一個(gè)目錄: ? ?
<move todir="newdir"> ? ?
??? <fileset dir="olddir"/> ? ?
</move>

8、echo 命令

該任務(wù)的作用是根據(jù)日志或監(jiān)控器的級(jí)別輸出信息。它包括 message 、 file 、 append 和 level 四個(gè)屬性,舉例如下 ? ?
<echo message="ant message" file="/logs/ant.log" append="true">

9、jar 標(biāo)簽節(jié)點(diǎn)元素

該標(biāo)簽用來(lái)生成一個(gè)JAR文件,其屬性如下。 ? ?
● destfile表示JAR文件名。 ? ?
● basedir表示被歸檔的文件名。 ? ?
● includes表示別歸檔的文件模式。 ? ?
● exchudes表示被排除的文件模式。

● compress表示是否壓縮。

示例:


<jar?destfile="${webRoot}/${ash_jar}"?level="9"?compress="true"?encoding="utf-8"?basedir="${dest}">

? ? ?

????<manifest>

? ? ?

????????<attribute?name="Implementation-Version"?value="Version:?2.2"/>

? ? ?

????</manifest>

? ? ?

</jar>

上面的mainfest是jar包中的MEAT-INF中的MANIFEST.MF中的文件內(nèi)容

同樣打包操作的的還有war、tgz,已經(jīng)解壓操作uzip


<!--?創(chuàng)建zip?-->

? ? ?

<zip?basedir="${basedir}\classes"?zipfile="temp\output.zip"/>

? ? ?

<!--?創(chuàng)建tgz?-->

? ? ?

<gzip?src="classes\**\*.class"?zipfile="output.class.gz"/>

? ? ?

<!--?解壓zip?-->

? ? ?

<unzip?src="output.class.gz"?dest="extractDir"/>

? ? ?

<!--?建立war包?-->

? ? ?

<war?destfile="${webRoot}/ash.war"?basedir="${basedir}/web"?webxml="${basedir}/web/WEB-INF/web.xml">

? ? ?

????<exclude?name="WEB-INF/classes/**"/>

? ? ?

????<exclude?name="WEB-INF/lib/**"/>

? ? ?

????<exclude?name="WEB-INF/work/_jsp/**"/>

? ? ?

????<lib?dir="${lib.dir}"?includes="**/*.jar,?**/*.so,?**/*.dll">

? ? ?

????????<exclude?name="${webRoot}\${helloworld_jar}"/>

? ? ?

????</lib>

? ? ?

????<lib?file="${webRoot}/${helloworld_jar}"/>

? ? ?

????<classes?dir="${dest}"?includes="**/*.xml,?**/*.properites,?**/*.xsd">?</classes>

? ? ?

</war>

10、javac 標(biāo)簽節(jié)點(diǎn)元素

該標(biāo)簽用于編譯一個(gè)或一組java文件,其屬性如下。 ? ?
● srcdir表示源程序的目錄。 ? ?
● destdir表示class文件的輸出目錄。 ? ?
● include表示被編譯的文件的模式。 ? ?
● excludes表示被排除的文件的模式。 ? ?
● classpath表示所使用的類路徑。 ? ?
● debug表示包含的調(diào)試信息。 ? ?
● optimize表示是否使用優(yōu)化。 ? ?
● verbose 表示提供詳細(xì)的輸出信息。 ? ?
● fileonerror表示當(dāng)碰到錯(cuò)誤就自動(dòng)停止。

示例


<javac?srcdir="${src}"?destdir="${dest}"/>

? ? ?

<!--?設(shè)置jvm內(nèi)存

? ? ?

<javac?srcdir="src"?fork="true"/>

? ? ?

<javac?srcdir="src"?fork="true"?executable="d:\sdk141\bin\javac"

? ? ?

memoryMaximumSize="128m"/>

? ? ?

-->

11、java 標(biāo)簽節(jié)點(diǎn)元素

該標(biāo)簽用來(lái)執(zhí)行編譯生成的.class文件,其屬性如下。 ? ?
● classname 表示將執(zhí)行的類名。 ? ?
● jar表示包含該類的JAR文件名。 ? ?
● classpath所表示用到的類路徑。 ? ?
● fork表示在一個(gè)新的虛擬機(jī)中運(yùn)行該類。 ? ?
● failonerror表示當(dāng)出現(xiàn)錯(cuò)誤時(shí)自動(dòng)停止。 ? ?
● output 表示輸出文件。 ? ?
● append表示追加或者覆蓋默認(rèn)文件。

示例


<java?classname="com.hoo.test.HelloWorld"?classpath="${hello_jar}"/>

12、arg 數(shù)據(jù)參數(shù)元素

由Ant構(gòu)建文件調(diào)用的程序,可以通過(guò)<arg>元素向其傳遞命令行參數(shù),如apply,exec和java任務(wù)均可接受嵌套<arg>元素,可以為各自的過(guò)程調(diào)用指定參數(shù)。以下是<arg>的所有屬性。 ? ?
● values 是一個(gè)命令參數(shù)。如果參數(shù)中有空格,但又想將它作為單獨(dú)一個(gè)值,則使用此屬性。 ? ?
● file 表示一個(gè)參數(shù)的文件名。在構(gòu)建文件中,此文件名相對(duì)于當(dāng)前的工作目錄。 ? ?
● line 表示用空格分隔的多個(gè)參數(shù)列表。 ? ?
● 表示路徑,一個(gè)作為單個(gè)命令行變量的path-like的字符串;或作為分隔符,Ant會(huì)將其轉(zhuǎn)變?yōu)樘囟ㄆ脚_(tái)的分隔符。 ? ?
● pathref 引用的path(使用path元素節(jié)點(diǎn)定義path)的id ? ?
● prefix 前綴 ? ?
● suffix 后綴

例子 ? ?
<arg value="-l -a"/> ? ?
是一個(gè)含有空格的單個(gè)的命令行變量。 ? ?
<arg line="-l -a"/> ? ?
是兩個(gè)空格分隔的命令行變量。 ? ?
<arg path="/dir;/dir2:\dir3"/> ? ?
是一個(gè)命令行變量,其值在DOS系統(tǒng)上為\dir;\dir2;\dir3;在Unix系統(tǒng)上為/dir:/dir2:/dir3 。

13、ervironment 類型

由Ant構(gòu)建文件調(diào)用的外部命令或程序,<env>元素制定了哪些環(huán)境變量要傳遞給正在執(zhí)行的系統(tǒng)命令,<env>元素可以接受以下屬性。 ? ?
● file表示環(huán)境變量值的文件名。此文件名要被轉(zhuǎn)換位一個(gè)絕對(duì)路徑。 ? ?
● path表示環(huán)境變量的路徑。Ant會(huì)將它轉(zhuǎn)換為一個(gè)本地約定。 ? ?
● value 表示環(huán)境變量的一個(gè)直接變量。 ? ?
● key 表示環(huán)境變量名。 ? ?
注意 file path 或 value只能取一個(gè)。

14、filelist 文件集合列表

filelist 是一個(gè)支持命名的文件列表的數(shù)據(jù)類型,包含在一個(gè)filelist類型中的文件不一定是存在的文件。以下是其所有的屬性。 ? ?
● dir是用于計(jì)算絕對(duì)文件名的目錄。 ? ?
● files 是用逗號(hào)分隔的文件名列表。 ? ?
● refid 是對(duì)某處定義的一個(gè)<filelist>的引用。 ? ?
注意 dir 和 files 都是必要的,除非指定了refid(這種情況下,dir和files都不允許使用)。

示例


<filelist?id="docfiles"?dir="${doc.src}"?files="foo.xml,bar.xml"/>

? ? ?

文件集合?${doc.src}/foo.xml和${doc.src}/bar.xml.?這些文件也許還是不存在的文件.

? ? ?

<filelist?id="docfiles"?dir="${doc.src}"?files="foo.xml?bar.xml"/>

? ? ?

?

? ? ?

<filelist?refid="docfiles"/>

? ? ?

?

? ? ?

<filelist?id="docfiles"?dir="${doc.src}">

? ? ?

????<file?name="foo.xml"/>

? ? ?

????<file?name="bar.xml"/>

? ? ?

</filelist>

15、fileset 文件類型

fileset 數(shù)據(jù)類型定義了一組文件,并通常表示為<fileset>元素。不過(guò),許多ant任務(wù)構(gòu)建成了隱式的fileset,這說(shuō)明他們支持所有的fileset屬性和嵌套元素。以下為fileset 的屬性列表。 ? ?
● dir表示fileset 的基目錄。 ? ?
● casesensitive的值如果為false,那么匹配文件名時(shí),fileset不是區(qū)分大小寫的,其默認(rèn)值為true. ? ?
● defaultexcludes 用來(lái)確定是否使用默認(rèn)的排除模式,默認(rèn)為true。 ? ?
● excludes 是用逗號(hào)分隔的需要派出的文件模式列表。 ? ?
● excludesfile 表示每行包含一個(gè)排除模式的文件的文件名。 ? ?
● includes 是用逗號(hào)分隔的,需要包含的文件模式列表。 ? ?
● includesfile 表示每行包括一個(gè)包含模式的文件名。

示例


<fileset?id="lib.runtime"?dir="${lib.path}/runtime">

? ? ?

????<include?name="**/*.jar"/>

? ? ?

????<include?name="**/*.so"/>

? ? ?

????<include?name="**/*.dll"/>

? ? ?

</fileset>

? ? ?

?

? ? ?

<fileset?id="lib.container"?dir="${lib.path}/container">

? ? ?

????<include?name="**/*.jar"/>

? ? ?

</fileset>

? ? ?

?

? ? ?

<fileset?id="lib.extras"?dir="${lib.path}">

? ? ?

????<include?name="test/**/*.jar"/>

? ? ?

</fileset>

16、patternset 類型

fileset 是對(duì)文件的分組,而patternset是對(duì)模式的分組,他們是緊密相關(guān)的概念。

<patternset>支持4個(gè)屬性:includes、excludex、includexfile、excludesfile,這些與fileset相同。

patternset 還允許以下嵌套元素:include,exclude,includefile 和 excludesfile.

示例


<!--?黑白名單?-->

? ? ?

<patternset?id="non.test.sources">

? ? ?

??<include?name="**/*.java"/>

? ? ?

??<!--?文件名包含Test的排除?-->

? ? ?

??<exclude?name="**/*Test*"/>

? ? ?

</patternset>

? ? ?

?

? ? ?

?

? ? ?

<patternset?id="sources">

? ? ?

??<include?name="std/**/*.java"/>

? ? ?

??<!--?判斷條件?存在professional就引入?-->

? ? ?

??<include?name="prof/**/*.java"?if="professional"/>

? ? ?

??<exclude?name="**/*Test*"/>

? ? ?

</patternset>

? ? ?

?

? ? ?

<!--?一組文件?-->

? ? ?

<patternset?includesfile="some-file"/>

? ? ?

<patternset>

? ? ?

??<includesfile?name="some-file"/>

? ? ?

<patternset/>

? ? ?

?

? ? ?

<patternset>

? ? ?

??<includesfile?name="some-file"/>

? ? ?

??<includesfile?name="${some-other-file}"?if="some-other-file"/>

? ? ?

<patternset/>

17、filterset 類型

filterset定義了一組過(guò)濾器,這些過(guò)濾器將在文件移動(dòng)或復(fù)制時(shí)完成文件的文本替換。 ? ?
主要屬性如下: ? ?
● begintoken 表示嵌套過(guò)濾器所搜索的記號(hào),這是標(biāo)識(shí)其開(kāi)始的字符串。 ? ?
● endtoken 表示嵌套過(guò)濾器所搜索的記號(hào)這是標(biāo)識(shí)其結(jié)束的字符串。 ? ?
● id 是過(guò)濾器的唯一標(biāo)志符。 ? ?
● refid 是對(duì)構(gòu)建文件中某處定義一個(gè)過(guò)濾器的引用。

示例


<!--?將目標(biāo)文件build.dir目錄中的version.txt文件內(nèi)容中的@DATE@替換成TODAY當(dāng)前日期的值,并把替換后的文件存放在dist.dir目錄中?-->

? ? ?

<copy?file="${build.dir}/version.txt"?toFile="${dist.dir}/version.txt">

? ? ?

??<filterset>

? ? ?

????<filter?token="DATE"?value="${TODAY}"/>

? ? ?

??</filterset>

? ? ?

</copy>

? ? ?

?

? ? ?

<!--?自定義變量的格式?-->

? ? ?

<copy?file="${build.dir}/version.txt"?toFile="${dist.dir}/version.txt">

? ? ?

??<!--?從version.txt中的%位置開(kāi)始搜索,到*位置結(jié)束,進(jìn)行替換內(nèi)容中的@DATE@替換成TODAY當(dāng)前日期的值-->

? ? ?

??<filterset?begintoken="%"?endtoken="*">

? ? ?

????<filter?token="DATE"?value="${TODAY}"/>

? ? ?

??</filterset>

? ? ?

</copy>

? ? ?

?

? ? ?

<!--?使用外部的過(guò)濾定義文件?-->

? ? ?

<copy?toDir="${dist.dir}/docs">

? ? ?

??<fileset?dir="${build.dir}/docs">

? ? ?

????<include?name="**/*.html">

? ? ?

??</fileset>

? ? ?

??<filterset?begintoken="%"?endtoken="*">

? ? ?

????<!--?過(guò)來(lái)文件從外部引入,過(guò)來(lái)的屬性和值配置在dist.properties文件中?-->

? ? ?

????<filtersfile?file="${user.dir}/dist.properties"/>

? ? ?

??</filterset>

? ? ?

</copy>

? ? ?

?

? ? ?

<!--?使用引用方式,重復(fù)利用過(guò)濾集?-->

? ? ?

<filterset?id="myFilterSet"?begintoken="%"?endtoken="*">

? ? ?

??<filter?token="DATE"?value="${TODAY}"/>

? ? ?

</filterset>

? ? ?

?

? ? ?

<copy?file="${build.dir}/version.txt"?toFile="${dist.dir}/version.txt">

? ? ?

??<filterset?refid="myFilterSet"/>

? ? ?

</copy>

18、path類型

path元素用來(lái)表示一個(gè)類路徑,不過(guò)它還可以用于表示其他的路徑。在用作幾個(gè)屬性時(shí),路經(jīng)中的各項(xiàng)用分號(hào)或冒號(hào)隔開(kāi)。在構(gòu)建的時(shí)候,此分隔符將代替當(dāng)前平臺(tái)中所有的路徑分隔符,其擁有的屬性如下。 ? ?
● location 表示一個(gè)文件或目錄。Ant在內(nèi)部將此擴(kuò)展為一個(gè)絕對(duì)路徑。 ? ?
● refid 是對(duì)當(dāng)前構(gòu)建文件中某處定義的一個(gè)path的引用。 ? ?
● path表示一個(gè)文件或路徑名列表。

示例


<path?id="buildpath">

? ? ?

????<fileset?refid="lib.runtime"/>

? ? ?

????<fileset?refid="lib.container"/>

? ? ?

????<fileset?refid="lib.extras"/>

? ? ?

</path>

? ? ?

?

? ? ?

<path?id="src.paths">

? ? ?

????<fileset?id="srcs"?dir=".">

? ? ?

????????<include?name="src/**/*.java"/>

? ? ?

????</fileset>

? ? ?

</path>

?

八、ant編譯打包、運(yùn)行工程

<?xml?version="1.0"?encoding="UTF-8"?>

? ?

<!--?name是當(dāng)前工程的名稱,default是默認(rèn)執(zhí)行的任務(wù),basedir是工作目錄(.代表當(dāng)前根目錄)?-->

? ?

<project?name="HelloWorld"?default="run"?basedir=".">

? ?

????<!--?property類似于程序中定義簡(jiǎn)單的變量?-->

? ?

????<property?name="src"?value="src"/>

? ?

????<property?name="dest"?value="classes"/>

? ?

????<property?name="hello_jar"?value="helloWorld.jar"/>

? ?

????<!--

? ?

????target是一個(gè)事件、事情、任務(wù),?name是當(dāng)前事情的名稱,depends是依賴的上一件或是多件事情

? ?

????如果所依賴的事情沒(méi)有執(zhí)行,ant會(huì)先運(yùn)行依賴事情,然后再運(yùn)行當(dāng)前事情

? ?

????-->

? ?


? ?

????<!--?初始化?-->

? ?

????<target?name="init">

? ?

????????<!--?建立classes目錄?-->

? ?

????????<mkdir?dir="${dest}"/>

? ?

????????<mkdir?dir="temp"/>

? ?

????????<mkdir?dir="temp2"/>

? ?

????</target>

? ?


? ?

????<!--?編譯?-->

? ?

????<target?name="compile"?depends="init">

? ?

????????<javac?srcdir="${src}"?destdir="${dest}"/>

? ?

????????<!--?設(shè)置jvm內(nèi)存

? ?

????????<javac?srcdir="src"?fork="true"/>

? ?

????????<javac?srcdir="src"?fork="true"?executable="d:\sdk141\bin\javac"

? ?

????????memoryMaximumSize="128m"/>

? ?

????????-->

? ?

????</target>

? ?


? ?

????<!--?建立jar包?-->

? ?

????<target?name="build"?depends="compile">

? ?

????????<!--

? ?

????????<jar?jarfile="${hello_jar}"?basedir="${dest}"/>

? ?

????????創(chuàng)建一個(gè)名稱是package.jar文件

? ?

????????<jar?destfile="package.jar"?basedir="classes"/>

? ?

????????-->

? ?

????????<jar?destfile="${hello_jar}"?basedir="classes">

? ?

????????????<!--?向jar包中的main文件中添加內(nèi)容?-->

? ?

????????????<manifest>

? ?

????????????????<attribute?name="Built-By"?value="${user.name}"/>

? ?

????????????????<attribute?name="Main-class"?value="package.Main"/>

? ?

????????????</manifest>

? ?

????????</jar>

? ?

????????<!--?復(fù)制jar文件??todir="復(fù)制到目錄"-->

? ?

????????<copy?file="${hello_jar}"?tofile="${dest}\temp.jar"/>

? ?

????????<copy?todir="temp">

? ?

????????????<!--?不按照默認(rèn)方式?defaultexcludes=""?-->

? ?

??????????????<fileset?dir="src">

? ?

????????????????<include?name="**/*.java"/>

? ?

??????????????</fileset>

? ?

????????</copy>

? ?


? ?

????????<copy?todir="temp2">

? ?

????????????<fileset?dir="src">

? ?

????????????????<and>

? ?

????????????????????<contains?text="main"/>

? ?

????????????????????<size?value="1"?when="more"/>

? ?

????????????????</and>

? ?

????????????</fileset>

? ?

????????</copy>

? ?


? ?

????????<!--?移動(dòng)jar文件?-->

? ?

????????<move?file="${dest}\temp.jar"?tofile="temp\move-temp.jar"/>

? ?

????????<!--?創(chuàng)建zip?-->

? ?

????????<zip?basedir="${basedir}\classes"?zipfile="temp\output.zip"/>

? ?

????????<!--?創(chuàng)建tgz?-->

? ?

????????<gzip?src="classes\**\*.class"?zipfile="output.class.gz"/>

? ?

????????<!--?解壓zip?-->

? ?

????????<unzip?src="output.class.gz"?dest="extractDir"/>

? ?

????????<!--替換input.txt內(nèi)容中的old為new

? ?

????????<replace?file="input.txt"?token="old"?value="new"/>

? ?

????????-->

? ?

????</target>

? ?


? ?

????<!--?運(yùn)行?-->

? ?

????<target?name="run"?depends="build">

? ?

????????<java?classname="com.hoo.test.HelloWorld"?classpath="${hello_jar}"/>

? ?

????</target>

? ?


? ?

????<!--?清除?-->

? ?

????<target?name="clean">

? ?

????????<!--?刪除生成的文件?-->

? ?

????????<delete?dir="${dest}"/>

? ?

????????<delete?file="${hello_jar}"/>

? ?

????</target>

? ?


? ?

????<tstamp>

? ?

???????<format?property="OFFSET_TIME"

? ?

???????????????pattern="HH:mm:ss"

? ?

???????????????offset="10"?unit="minute"/>

? ?

????</tstamp>

? ?


? ?

????<!--?重新運(yùn)行?-->

? ?

????<target?name="rerun"?depends="clean,run">

? ?

????????<echo?message="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>

? ?

????????<aunt?target="clean"/>

? ?

????????<aunt?target="run"/>

? ?

????</target>

? ?

</project>

要說(shuō)的的東西基本上就那么多,ant還有很多內(nèi)容沒(méi)有提到,有興趣的可以自己去研究研究。ant不難,你用它就像是在docs控制臺(tái)輸入命令行一樣,只不過(guò)ant是將命令行轉(zhuǎn)換為xml的腳本信息,可以進(jìn)行重復(fù)的運(yùn)行。在一定情況下,提高了效率和重復(fù)的工作。


轉(zhuǎn)載于:https://blog.51cto.com/maplebb/1832900

總結(jié)

以上是生活随笔為你收集整理的ant 使用指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。