編譯
Java
代碼的任務(wù)的編寫方式:
??????????????? <javac srcdir="src"/>
這個標簽尋找
src
目錄中以
.java
為擴展名的所有文件,并對它們調(diào)用
javac
編譯器,從而在相同的目錄中生成類文件。當(dāng)然,將類文件放在一個單獨的目錄結(jié)構(gòu)中通常會更清晰;可以通過添加
destdir
屬性來讓
Ant
做到這點。其他有用的屬性包括:
classpath :等價于 javac 的 -classpath 選項。
debug="true" :指示編譯器應(yīng)該帶調(diào)試信息編譯源文件。
javac 任務(wù)的一個重要特點在于,它僅編譯那些它認為需要編譯的源文件。如果某個類文件已經(jīng)存在,并且對應(yīng)的源文件自從該類文件生成以來還沒有改變過,那么該源文件就不會被重新編譯。 javac 任務(wù)的輸出顯示了實際被編譯的源文件的數(shù)目。編寫一個 clean 目標來從目標目錄移除生成的任何類文件是個很好的習(xí)慣。如果想要確保所有源文件都已編譯,就可以使用這個任務(wù)。這種行為刻畫了 Ant 的許多任務(wù)的特點:如果某個任務(wù)能夠確定所請求的操作不需要執(zhí)行,那么該操作就會被跳過。
Ant 的 javac 任務(wù)的默認行為是調(diào)用運行 Ant 本身的任何 JVM 的標準編譯器。然而,有時您可能想要單獨地調(diào)用編譯器 —— 例如當(dāng)你希望指定編譯器的某些內(nèi)存選項,或者需要使用一種不同級別的編譯器的時候。為實現(xiàn)這個目的,只需將 javac 的 fork 屬性設(shè)置為 true ,比如像下面這樣:
<javac srcdir="src" fork="true"/>
如果想要指定一個不同的 javac 可執(zhí)行文件,并向它傳遞一個最大內(nèi)存設(shè)置,可以像下面這樣做:
??? <javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="128" unitname="m">128m</chmetcnv>"/>
在編譯 Java 源文件之后,結(jié)果類文件通常被打包到一個 JAR 文件中,這個文件類似 zip 歸檔文件。每個 JAR 文件都包含一個清單文件,它可以指定該 JAR 文件的屬性。
下面是 Ant 中 jar 任務(wù)的一個簡單使用例子:
<jar destfile="package.jar" basedir="classes"/>
這將創(chuàng)建一個名為 package.jar 的 JAR 文件,并把 classes 目錄中的所有文件添加到其中( JAR 文件能夠包含任意類型的文件,而不只是類文件)。此處沒有指定清單文件,因此 Ant 將提供一個基本的清單文件。
manifest 屬性允許指定一個用作該 JAR 文件的清單的文件。清單文件的內(nèi)容還可以使用 manifest 任務(wù)在生成文件中指定。這個任務(wù)能夠像文件系統(tǒng)寫入一個清單文件,或者能夠?qū)嶋H嵌套在 jar 之內(nèi),以便一次性地創(chuàng)建清單文件和 JAR 文件。 例如:







在生成環(huán)境中使用當(dāng)前時間和日期,以某種方式標記某個生成任務(wù)的輸出,以便記錄它是何時生成的,這經(jīng)常是可取的。這可能涉及編輯一個文件,以便插入一個字符串來指定日期和時間,或?qū)⑦@個信息合并到 JAR 或 zip 文件的文件名中。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
?
這種需要是通過簡單但是非常有用的 tstamp 任務(wù)來解決的。這個任務(wù)通常在某次生成過程開始時調(diào)用,比如在一個 init 目標中。這個任務(wù)不需要屬性,許多情況下只需 <tstamp/> 就足夠了。
在調(diào)用 tstamp 任務(wù)之后,我們能夠根據(jù)日期命名該 JAR 文件,如下所示:
<jar destfile="package-${DSTAMP}.jar" basedir="classes"/>
因此,如果這個任務(wù)在 2006 年 3 月 8 日調(diào)用,該 JAR 文件將被命名為 package-20060308.jar
還可以配置 tstamp 任務(wù)來設(shè)置不同的屬性,應(yīng)用一個當(dāng)前時間之前或之后的時間偏移,或以不同的方式格式化該字符串。所有這些都是使用一個嵌套的 format 元素來完成的,如下所示:






上面的清單將 OFFSET_TIME 屬性設(shè)置為距離當(dāng)前時間 10 分鐘之后的小時數(shù)、分鐘數(shù)和秒數(shù)。
用于定義格式字符串的字符與 java.text.SimpleDateFormat 類所定義的那些格式字符相同。
下面將把這些代碼片斷組合成一個完整的生成文件,它將編譯
src
目錄下的所有源代碼,將結(jié)果類文件放在
build
目錄下,然后把所有類文件打包到
dist
目錄中的一個
JAR
文件中。要自己試驗這個生成文件,您所需要的就是包含一個或多個
Java
源代碼文件的
src
目錄 —— 這個目錄可以包含從簡單的“
Hell World
”程序到來自某個現(xiàn)有項目的大量源文件的任何內(nèi)容。如果需要向
Java classpath
添加
JAR
文件或其他任何內(nèi)容,以便成功地編譯源代碼,您只需在
javac
任務(wù)中為其添加一個
classpath
屬性:


































下面是使用該文件執(zhí)行的某次生成過程的示例輸出(您得到的輸出可能不一樣,具體取決于 src 目錄的內(nèi)容):
















注意 JAR 文件是根據(jù)當(dāng)前日期來命名的,并且為應(yīng)用程序的主類設(shè)置了一個清單條目,以便主類能夠通過一個簡單的命令 java -jar package-20031217.jar 來直接運行。我們還創(chuàng)建了一個 JAR 文件,它僅包含項目的源代碼。
?
?
?
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
