編譯
Java
代碼的任務的編寫方式:
??????????????? <javac srcdir="src"/>
這個標簽尋找
src
目錄中以
.java
為擴展名的所有文件,并對它們調用
javac
編譯器,從而在相同的目錄中生成類文件。當然,將類文件放在一個單獨的目錄結構中通常會更清晰;可以通過添加
destdir
屬性來讓
Ant
做到這點。其他有用的屬性包括:
classpath :等價于 javac 的 -classpath 選項。
debug="true" :指示編譯器應該帶調試信息編譯源文件。
javac 任務的一個重要特點在于,它僅編譯那些它認為需要編譯的源文件。如果某個類文件已經存在,并且對應的源文件自從該類文件生成以來還沒有改變過,那么該源文件就不會被重新編譯。 javac 任務的輸出顯示了實際被編譯的源文件的數目。編寫一個 clean 目標來從目標目錄移除生成的任何類文件是個很好的習慣。如果想要確保所有源文件都已編譯,就可以使用這個任務。這種行為刻畫了 Ant 的許多任務的特點:如果某個任務能夠確定所請求的操作不需要執行,那么該操作就會被跳過。
Ant 的 javac 任務的默認行為是調用運行 Ant 本身的任何 JVM 的標準編譯器。然而,有時您可能想要單獨地調用編譯器 —— 例如當你希望指定編譯器的某些內存選項,或者需要使用一種不同級別的編譯器的時候。為實現這個目的,只需將 javac 的 fork 屬性設置為 true ,比如像下面這樣:
<javac srcdir="src" fork="true"/>
如果想要指定一個不同的 javac 可執行文件,并向它傳遞一個最大內存設置,可以像下面這樣做:
??? <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 源文件之后,結果類文件通常被打包到一個 JAR 文件中,這個文件類似 zip 歸檔文件。每個 JAR 文件都包含一個清單文件,它可以指定該 JAR 文件的屬性。
下面是 Ant 中 jar 任務的一個簡單使用例子:
<jar destfile="package.jar" basedir="classes"/>
這將創建一個名為 package.jar 的 JAR 文件,并把 classes 目錄中的所有文件添加到其中( JAR 文件能夠包含任意類型的文件,而不只是類文件)。此處沒有指定清單文件,因此 Ant 將提供一個基本的清單文件。
manifest 屬性允許指定一個用作該 JAR 文件的清單的文件。清單文件的內容還可以使用 manifest 任務在生成文件中指定。這個任務能夠像文件系統寫入一個清單文件,或者能夠實際嵌套在 jar 之內,以便一次性地創建清單文件和 JAR 文件。 例如:







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






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


































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
















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

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