ant應用指南具體入門教程。本站提示廣大學習愛好者:(ant應用指南具體入門教程)文章只能為提供參考,不一定能成為您想要的結果。以下是ant應用指南具體入門教程正文
1、概述
ant 是一個將軟件編譯、測試、安排等步調接洽在一路加以主動化的一個對象,年夜多用於Java情況中的軟件開辟。在現實軟件開辟中,有許多處所可以用到ant。
開辟情況:
System:Windows
JDK:1.6+
IDE:eclipse
ant:1.9.1
2、長處
ant 是Apache軟件基金會JAKARTA目次中的一個子項目,它有以下的長處:
1、跨平台性:Ant是純Java說話編寫的,所以具有很好的跨平台性。
2、操作簡略:Ant是由一個內置義務和可選義務構成的,用ant義務就像是在dos中寫敕令行一樣。Ant運轉時須要一個XML文件(構建文件)。 Ant經由過程挪用target樹,便可以履行各類task。每一個task完成了特定接口對象。
3、保護簡略、可讀性好、集成簡略:因為Ant構建文件 時XML格局的文件,所以很輕易保護和書寫,並且構造很清楚。Ant可以集成到開辟情況中。因為Ant的跨平台性和操作簡略的特色,它很輕易集成到一些開辟情況中去。
3、裝置和設置裝備擺設
1、下載ant,http://mirror.esocc.com/apache//ant/binaries/apache-ant-1.9.1-bin.zip
2、解壓zip緊縮包,將緊縮包放置你要放置的目次。我這裡放置在D:\apache-ant-1.9.1,目次構造以下:
bin是ant的法式運轉進口,假如沒有設置裝備擺設ANT_HOME的情形下,可以經由過程bin目次中的bat法式停止運轉build義務。
如:在cmd中運轉ant.bat便可以履行法式,固然你選摘要以後目次中存在一個build.xml(build.xml是默許的ant履行文件,固然你可以指定其他文件)
etc目次中寄存的都是一些xsl的輸入模板,創立一個增強的導出各類義務的XML輸入,使你的build文件解脫過時的正告
lib目次中寄存的是ant法式須要依附的jar包
manual目次是ant法式的贊助文檔
3、在我的電腦 –> 右鍵屬性 –> 高等體系設置裝備擺設 -> 情況變量 中設置裝備擺設ant
新建體系變量 ANT_HOME = D:\apache-ant-1.9.1
如許情況變量就設置裝備擺設好了,但條件你須要設置裝備擺設jdk的情況變量。假如你沒有設置裝備擺設jdk的情況變量,那末請你先設置裝備擺設好jdk變量。jdk情況設置裝備擺設辦法以下:
(1),裝置JDk到其默許目次:C:\Program Files\Java\jdk1.5.0_05 (沒有jdk去官方下載一個)
C:\Program Files\Java\jdk1.5.0
感化:告知體系JVM在甚麼處所
(2),右擊我的電腦,選屬性,高等,情況變量
(3),在體系變量欄點新建,湧現新建體系變量對話框,在變量名中填上JAVA_HOME ,變量值:C:\Program Files\Java\jdk1.5.0_05
(4),肯定後在體系變量(S)欄再新建一個情況變量CLASSPATH,變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(開首的dot和;不克不及少)
(5),肯定後在體系變量(S)欄查找並選中變量為Path的選項,點編纂在變量值(V)的末尾添加:
%JAVA_HOME%\bin
假如沒有找到PATH變量,本身新建一個!
假如你不想每次運轉都要cmd到class地點目次然後履行java敕令,可以把一切的class文件放到同一的目次組織下,然後將此目次也追加到CLASSPATH下。
測試代碼以下:
public class Test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
用記事本編纂後存為Test.java(文件名與類名雷同)文件,翻開敕令行窗口,
cd到文件地點目次下:
javac Test.java //編譯敕令
java Test //履行法式
假如輸入為:Hello World! OK,設置裝備擺設終了,不然,從新檢討。
4、測試ant
在啟動,運轉cmd的dos窗口中輸出ant,如圖:
假如湧現這個,那末祝賀你裝置勝利了!不然就掉敗了,檢討下後面的步調有無毛病。下面敕令會履行ant法式,ant默許履行build.xml中的義務,這裡在Administrator目次中沒有這個文件。
假如裝置掉敗,你看看能否存在一些情形:
1、沒有設置裝備擺設JAVA_HOME 或設置裝備擺設毛病,而且JAVA_HOME\bin\java.exe存在
2、沒有設置裝備擺設ANT_HOEM 或設置裝備擺設毛病,而且ANT_HOME\bin\ant.bat存在
3、檢討你的情況變量的path變量中,有木有設置裝備擺設...;%ANT_HOME%\bin;...
%PATH%=...maybe-other-entries...;%ANT_HOME%\bin;...maybe-other-entries...
5、ant的運轉時情況
ant在運轉敕令的時刻,有時刻會湧現一些公園的jar庫。這些庫會存在於每一個ant工程中,那末這個時刻我們可以把這個jar包放到ant_home\lib目次中作為全局的庫應用。
假如你不想“淨化”原始的ant法式,那末你可以把jar包放在以後windows用戶的目次下,詳細地位應當是${user.home}/.ant/lib 下。沒有以上目次可以手動樹立。
假如你只是暫時要添加lib,又不想把lib添加到以後ant工程中。你可以在運轉ant法式的時刻指定依附的lib參數。
同時,你還可以在以後build工程的classpath目次中添加你的工程依附jar包。
6、ant敕令
語法元素解釋以下:
-help
顯示描寫ant 敕令及其選項的贊助信息
-projecthelp
顯示包括在構建文件中的、一切用戶編寫的贊助文檔。即為各個<target>中description 屬性的文本,和包括在<description>元素中的任何文本。將有description 屬性的目的列為主目的(Main target),沒有此屬性的目的則列為子目的(Subtarget)。
-version
請求ant 顯示其版本信息,然撤退退卻出。
-quiet
克制並不是由構建文件中的echo 義務所發生的年夜多半新聞。
-verbose
顯示構建進程中每一個操作的具體新聞。此選項與-debug 選項只能選其一。
-debug
顯示Ant 和義務開辟人員曾經標記為調試新聞的新聞。此選項與-verbose 只能選其一。
-emacs
對日記新聞停止格局化,使它們可以或許很輕易地由Emacs 的shell 形式(shellmode)所解析;也就是說,打印義務事宜,但其實不縮排,在其之前也沒有[taskname]。
-logfile filename
將日記輸入重定向到指定文件。
-logger classname
指定一個類來處置Ant 的日記記載。所指定的類必需完成了org.apache.tools.ant.BuildLogger 接口。
-listener classname
為Ant 聲明一個監聽類,並增長到其監聽者列表中。在Ant與IDE或其他Java法式集成時,此選項異常有效。可以浏覽第六章以懂得有關監聽者的更多信息。必需將所指定的監聽類編寫為可以處置Ant 的構建新聞接發。
-buildfile filename
指定Ant 須要處置的構建文件。默許的構建文件為build.xml。
-Dproperty=value
在敕令行上界說一個特征名-值對。
-find filename
指定Ant 應該處置的構建文件。與-buildfile 選項分歧,假如所指定文件在以後目次中未找到,-find 就請求Ant 在其父目次中再停止搜刮。這類搜刮會持續在其先人目次中停止,直至到達文件體系的根為止,在此假如文件還未找到,則構建掉敗。
-atuoproxy jdk1.5以上的可使用署理設置
-nouserlib 運轉ant時不應用用戶lib中的jar包
-nice 設計主線程優先級
-logfile 應用指定的log日記
-noinput 不許可交互輸出
-keep-going, -k 履行不依附於一切目的
-propertyfile 加載一切屬性設置裝備擺設文件 -d 屬性文件優先
<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>
留意:
● 一切構建文件都要有<project>元素,並且至多有一個<target> 元素。
● 關於<project> 元素的default 屬性其實不必定須要默許值。
● 構建文件其實不必定要被定名為build.xml。不外build.xml 是ant 要搜刮的默許文件名。
● 每一個構建文件只能有一個<project> 元素。
在cmd窗口中進入到以後build.xml目次
ant
在以後目次下的build.xml運轉Ant,履行缺省的target。
ant -buildfile build-test.xml
在以後目次下的build-test.xml運轉Ant,履行缺省的target。
ant -buildfile build-test.xml clean
在以後目次下的build-test.xml運轉Ant,履行一個叫做clean的target。
ant -buildfile build-test.xml -Dbuild=build/classes clean
在以後目次下的build-test.xml運轉Ant,履行一個叫做clean的target,並設定build屬性的值為build/classes。
7、ant劇本:應用節點、元素和屬性、敕令指令
1、project 節點元素
project 元素是 Ant 構件文件的根元素, Ant 構件文件至多應當包括一個 project 元素,不然會產生毛病。在每一個 project 元素下,可包括多個 target 元素。接上去向讀者展現一下 project 元素的各屬性。
● name 屬性:用於指定 project 元素的稱號。
● default 屬性:用於指定 project 默許履行時所履行的 target 的稱號。
● basedir 屬性:用於指定基途徑的地位。該屬性沒有指准時,應用 Ant 的構件文件的附目次作為基准目次。
<?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,即當運轉ant 敕令時,假如沒有指明履行的target,則將履行默許的target(print-dir)。另外,還界說了basedir 屬性的值為 “.” ,.表現以後目次,進入以後目次後運轉ant 敕令,得一下成果:
2、target節點元素
target為ant的根本履行單位或是義務,它可以包括一個或多個詳細的單位/義務。多個target 可以存在互相依附關系。它有以下屬性:
● name 屬性:指定 target 元素的稱號,這個屬性在一個 project 元素中是獨一的。我們可以經由過程指定 target 元素的稱號來指定某個 target 。
● depends 屬性:用於描寫 target 之間的依附關系,若與多個 target 存在依附關系時,須要以“,”距離。 Ant 會按照 depends 屬性中 target 湧現的次序順次履行每一個 target ,被依附的target 會先履行。
● if 屬性:用於驗證指定的屬性是存在,若不存在,地點 target 將不會被履行。
● unless 屬性:該屬性的功效與 if 屬性的功效正好相反,它也用於驗證指定的屬性能否存在,若不存在,地點 target 將會被履行。
● description 屬性:該屬性是關於 target 功效的冗長描寫和解釋。
示例:
<?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>
從以下成果後可以看到,我們運轉的是名為 print的target ,因為它依附於version這個target義務,所以 version將起首被履行,同時由於體系設置裝備擺設了JDK,所以 ant.java.version 屬性存在,履行了version,輸入信息:"[echo] Java Version: 1.6 ",version履行終了後,接著履行 print,由於docs不存在,而unless屬性是在不存在時進入地點target 的,由此可知 print得以履行,輸入信息:"[echo] The base dir is:D:\Workspace\AntExample\build"。
3、property屬性節點元素
property元素可看做參量或許參數的界說,project 的屬性可以經由過程 property 元從來設定,也可在 Ant 以外設定。若要在內部引入某文件,例如 build.properties 文件,可以經由過程以下內容將其引:
<property file="build.properties"/>
property 元素可用作 task 的屬性值。在 task 中是經由過程將屬性名放在${屬性名}之間,並放在 task 屬性值的地位來完成的。
Ant 供給了一些內置的屬性,它能獲得的體系屬性的列表與 Java 文檔中 System.getProperties() 辦法獲得的屬性分歧,這些體系屬性可參考 sun 網站的解釋。同時, Ant 還供給了一些它本身的內置屬性,以下:
basedir: project 基目次的相對途徑;
ant.file: buildfile的相對途徑,上例中ant.file值為D:\Workspace\AntExample\build;
ant.version: Ant 的版本信息,本文為1.8.1 ;
ant.project.name: 以後指定的project的名字,即前文說到的project的name屬性值;
ant.java.version: Ant 檢測到的JDK版本,本文為 1.6 。
舉例解釋以下:
<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>
上例頂用戶設置了名為name 和age的兩個屬性,這兩個屬性設置後,鄙人文中可以經由過程 ${name} 和 ${age} 分離獲得這兩個屬性值。
4、copy敕令
copy重要用來對文件和目次的復制功效。舉例以下:
● 復制單個文件:
<copy file="old.txt" tofile="new.txt"/>
● 對文件目次停止復制:
<copy todir="../dest_dir">
<fileset dir="src_dir"/>
</copy>
● 將文件復制到別的的目次:
<copy file="src.txt" todir="c:/base"/>
5、delete敕令
對文件或目次停止刪除,舉例以下:
● 刪除某個文件:
<delete file="/res/image/cat.jpg"/>
● 刪除某個目次:
<delete dir="/res/image"/>
● 刪除一切的jar文件或空目次:
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.jar"/>
</delete>
6、 mkdir 敕令
創立目次。
<mkdir dir="/home/philander/build/classes"/>
7、 move 敕令
挪動文件或目次,舉例以下:
● 挪動單個文件:
<move file="sourcefile" tofile=”destfile”/>
● 挪動單個文件到另外一個目次:
<move file="sourcefile" todir=”movedir”/>
● 挪動某個目次到另外一個目次:
<move todir="newdir">
<fileset dir="olddir"/>
</move>
8、echo 敕令
該義務的感化是依據日記或監控器的級別輸入信息。它包含 message 、 file 、 append 和 level 四個屬性,舉例以下
<echo message="ant message" file="/logs/ant.log" append="true">
9、jar 標簽節點元素
該標簽用來生成一個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中的文件內容
異樣打包操作的的還有war、tgz,曾經解壓操作uzip
<!-- 創立zip -->
<zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
<!-- 創立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 標簽節點元素
該標簽用於編譯一個或一組java文件,其屬性以下。
● srcdir表現源法式的目次。
● destdir表現class文件的輸入目次。
● include表現被編譯的文件的形式。
● excludes表現被消除的文件的形式。
● classpath表現所應用的類途徑。
● debug表現包括的調試信息。
● optimize表現能否應用優化。
● verbose 表現供給具體的輸入信息。
● fileonerror表現當碰著毛病就主動停滯。
示例
<javac srcdir="${src}" destdir="${dest}"/>
<!-- 設置jvm內存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
11、java 標簽節點元素
該標簽用來履行編譯生成的.class文件,其屬性以下。
● classname 表現將履行的類名。
● jar表現包括該類的JAR文件名。
● classpath所表現用到的類途徑。
● fork表現在一個新的虛擬機中運轉該類。
● failonerror表現當湧現毛病時主動停滯。
● output 表現輸入文件。
● append表現追加或許籠罩默許文件。
示例
<java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
12、arg 數據參數元素
由Ant構建文件挪用的法式,可以經由過程<arg>元素向其傳遞敕令行參數,如apply,exec和java義務都可接收嵌套<arg>元素,可認為各自的進程挪用指定參數。以下是<arg>的一切屬性。
● values 是一個敕令參數。假如參數中有空格,但又想將它作為零丁一個值,則應用此屬性。
● file 表現一個參數的文件名。在構建文件中,此文件名絕對於以後的任務目次。
● line 表現用空格分隔的多個參數列表。
● 表現途徑,一個作為單個敕令行變量的path-like的字符串;或作為分隔符,Ant會將其改變為特定平台的分隔符。
● pathref 援用的path(應用path元素節點界說path)的id
● prefix 前綴
● suffix 後綴
例子
<arg value="-l -a"/>
是一個含有空格的單個的敕令行變量。
<arg line="-l -a"/>
是兩個空格分隔的敕令行變量。
<arg path="/dir;/dir2:\dir3"/>
是一個敕令行變量,其值在DOS體系上為\dir;\dir2;\dir3;在Unix體系上為/dir:/dir2:/dir3 。
13、ervironment 類型
由Ant構建文件挪用的內部敕令或法式,<env>元素制訂了哪些情況變量要傳遞給正在履行的體系敕令,<env>元素可以接收以部屬性。
● file表現情況變量值的文件名。此文件名要被轉換位一個相對途徑。
● path表現情況變量的途徑。Ant會將它轉換為一個當地商定。
● value 表現情況變量的一個直接變量。
● key 表現情況變量名。
留意 file path 或 value只能取一個。
14、filelist 文件聚集列表
filelist 是一個支撐定名的文件列表的數據類型,包括在一個filelist類型中的文件紛歧定是存在的文件。以下是其一切的屬性。
● dir是用於盤算相對文件名的目次。
● files 是用逗號分隔的文件名列表。
● refid 是對某處界說的一個<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 數據類型界說了一組文件,並平日表現為<fileset>元素。不外,很多ant義務構建成了隱式的fileset,這解釋他們支撐一切的fileset屬性和嵌套元素。以下為fileset 的屬性列表。
● dir表現fileset 的基目次。
● casesensitive的值假如為false,那末婚配文件名時,fileset不是辨別年夜小寫的,其默許值為true.
● defaultexcludes 用來肯定能否應用默許的消除形式,默許為true。
● excludes 是用逗號分隔的須要派出的文件形式列表。
● excludesfile 表現每行包括一個消除形式的文件的文件名。
● includes 是用逗號分隔的,須要包括的文件形式列表。
● includesfile 表現每行包含一個包括形式的文件名。
示例
<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 是對文件的分組,而patternset是對形式的分組,他們是慎密相干的概念。
<patternset>支撐4個屬性: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界說了一組過濾器,這些過濾器將在文件挪動或復制時完成文件的文本調換。
重要屬性以下:
● begintoken 表現嵌套過濾器所搜刮的記號,這是標識其開端的字符串。
● endtoken 表現嵌套過濾器所搜刮的記號這是標識其停止的字符串。
● id 是過濾器的獨一標記符。
● refid 是對構建文件中某處界說一個過濾器的援用。
示例
<!-- 將目的文件build.dir目次中的version.txt文件內容中的@DATE@調換成TODAY以後日期的值,並把調換後的文件寄存在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中的%地位開端搜刮,到*地位停止,停止調換內容中的@DATE@調換成TODAY以後日期的值-->
<filterset begintoken="%" endtoken="*">
<filter token="DATE" value="${TODAY}"/>
</filterset>
</copy>
<!-- 應用內部的過濾界說文件 -->
<copy toDir="${dist.dir}/docs">
<fileset dir="${build.dir}/docs">
<include name="**/*.html">
</fileset>
<filterset begintoken="%" endtoken="*">
<!-- 過去文件從內部引入,過去的屬性和值設置裝備擺設在dist.properties文件中 -->
<filtersfile file="${user.dir}/dist.properties"/>
</filterset>
</copy>
<!-- 應用援用方法,反復應用過濾集 -->
<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元素用來表現一個類途徑,不外它還可以用於表現其他的途徑。在用作幾個屬性時,路經中的各項用分號或冒號離隔。在構建的時刻,此分隔符將取代以後平台中一切的途徑分隔符,其具有的屬性以下。
● location 表現一個文件或目次。Ant在外部將此擴大為一個相對途徑。
● refid 是對以後構建文件中某處界說的一個path的援用。
● path表現一個文件或途徑名列表。
示例
<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>
8、ant編譯打包、運轉工程
<?xml version="1.0" encoding="UTF-8"?>
<!-- name是以後工程的稱號,default是默許履行的義務,basedir是任務目次(.代表以後根目次) -->
<project name="HelloWorld" default="run" basedir=".">
<!-- property相似於法式中界說簡略的變量 -->
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="helloWorld.jar"/>
<!--
target是一個事宜、工作、義務, name是以後工作的稱號,depends是依附的上一件或是多件工作
假如所依附的工作沒有履行,ant會先運轉依附工作,然後再運轉以後工作
-->
<!-- 初始化 -->
<target name="init">
<!-- 樹立classes目次 -->
<mkdir dir="${dest}"/>
<mkdir dir="temp"/>
<mkdir dir="temp2"/>
</target>
<!-- 編譯 -->
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
<!-- 設置jvm內存
<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}"/>
創立一個稱號是package.jar文件
<jar destfile="package.jar" basedir="classes"/>
-->
<jar destfile="${hello_jar}" basedir="classes">
<!-- 向jar包中的main文件中添加內容 -->
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<!-- 復制jar文件 todir="復制到目次"-->
<copy file="${hello_jar}" tofile="${dest}\temp.jar"/>
<copy todir="temp">
<!-- 不依照默許方法 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>
<!-- 挪動jar文件 -->
<move file="${dest}\temp.jar" tofile="temp\move-temp.jar"/>
<!-- 創立zip -->
<zip basedir="${basedir}\classes" zipfile="temp\output.zip"/>
<!-- 創立tgz -->
<gzip src="classes\**\*.class" zipfile="output.class.gz"/>
<!-- 解壓zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!--調換input.txt內容中的old為new
<replace file="input.txt" token="old" value="new"/>
-->
</target>
<!-- 運轉 -->
<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>
<!-- 從新運轉 -->
<target name="rerun" depends="clean,run">
<echo message="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>
<aunt target="clean"/>
<aunt target="run"/>
</target>
</project>
要說的的器械根本上就那末多,ant還有許多內容沒有提到,有興致的可以本身去研討研討。ant不難,你用它就像是在docs掌握台輸出敕令行一樣,只不外ant是將敕令行轉換為xml的劇本信息,可以停止反復的運轉。在必定情形下,進步了效力和反復的任務。