程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Eclipse中輕松使用Ant

在Eclipse中輕松使用Ant

編輯:關於JAVA

開始之前

關於本教程

Apache Ant 被認為是 Java™ 開發環境中最經典的構建工具。大多數合格的 Java 項目都以 Ant 構建腳本的形式附加有某些種類的定制構建過程。因此,每種有價值的 Java IDE 都必須為 Ant 內置有某些種類的支持。Eclipse 是一種受人喜愛的 IDE,它也不例外,為 Ant 提供廣泛的內置支持。

了解如何使用 Eclipse 中的特性來編寫和調試 Ant 文件,以及如何將 Ant 文件用作構建器(builder)。

前提條件

本教程假設讀者具有創建 Ant 腳本和使用 Eclipse 平台的基本知識。

系統需求

要嘗試本教程中的例子,您需要從 Eclipse.org 下載的 Eclipse SDK 運行在 Java Virtual Machine (JVM) V1.4 或更晚版本上。從 Sun Microsystems 或 IBM 下載 Java 技術。

使用 Ant

創建新的 Ant 構建文件

首先向您的項目中添加一個新的 Ant 文件,本教程後面會用到這個項目。

打開 Package Explorer

右擊任何 Java 項目並單擊 New > File

在 New File 窗口中,鍵入 build.xml 作為文件名

文件創建好了,並且打開了 Ant 編輯器。現在,向該文件中添加一些內容。單擊編輯器中的任何地方,並按 Ctrl+Space。出現一個幫助完成任務的窗口(見圖 1),其中包含一個叫做 Buildfile template 的選項,該模板是一個帶有兩個目標的簡單構建文件(buildfile)。單擊這個模板,將一個包含兩個目標的示例項目添加到該文件。

圖 1. 使用 Buildfile 模板

有了一些內容以後,我們就來仔細看看 Ant 編輯器。

Ant 編輯器

了解 Ant 編輯器特性:突出顯示、代碼完成、折疊、重命名,以及標記出現和問題。

突出顯示

為了易於使用,編輯器以不同顏色顯示構建文件的每種元素。注釋與屬性以不同的顏色顯示,等等。您甚至可以為每種元素類型定制顏色。

要更改突出顯示的顏色,可完成以下步驟:

單擊 Window > Preferences > Ant > Editor

單擊 Syntax 選項卡

在結果頁面上,為每種元素類型選擇顏色

代碼完成

Ant 編輯器提供全面的代碼完成功能,能幫助您快速地鍵入 Ant 構建文件。在一個目標定義內單擊,然後按 Ctrl+Space,會看到所有可用任務的一個列表。您選擇一個任務之後,編輯器會自動插入開始標記和結束標記(見圖 2)。

圖 2. 任務列表

但是並不止於此。Ant 編輯器的代碼完成功能遠遠不只是自動標記插入。編輯器知道我們的構建文件中定義的目標。所以,比如說當我們想要插入一個目標的名稱時,也就是說鍵入項目的 default 屬性或者目標的 depends 屬性,按 Ctrl+Space 將顯示我們可以填充的所有可用目標的一個列表(見圖 3)。

圖 3. 可用的目標

編輯器甚至知道我們的構建文件中定義的屬性。所以,當我們鍵入一個屬性的值時,在鍵入初始的 $(美元符號)之後,我們可以按 Ctrl+Space 來看構建文件中定義的所有屬性的列表和 所有系統屬性(見圖 4)。

圖 4. 可用屬性的列表

Ant 編輯器中的另一個代碼完成特性是 Code 模板(見圖 5)。當使用 Buildfile 模板向構建文件添加示例內容時會用到 Code 模板。Ant 編輯器中有幾個可用的 Code 模板,利用這些模板,可以快速地輸入目標定義、屬性定義,等等。注意,在我們應用一個模板之後,在編輯器自動填充的文本上將出現一個方框(見圖 6)。這些方框實質上是用於執行一些空格填充。它們允許我們鍵入文本,比如目標的名稱及其依賴關系。我們可以使用 Tab 鍵在模板中的空格之間循環。

圖 5. Code 模板在發揮作用

圖 6. 應用模板

折疊

Ant 編輯器可以把所有的 Extensible Markup Language (XML) 元素都折疊在我們的構建文件中。只要單擊左邊的 + 或 - 按鈕,就可以展開或折疊各種元素。該功能很有用,因為利用該功能可以快速查看文件的內容。將鼠標懸停在 + 按鈕上,一個上下文窗口將顯示元素的內容。

重命名

Ant 編輯器的一個真正偉大的特性是 Rename in File 特性。使用該特性,可以在整個文件中重命名目標和屬性的名稱(見圖 7)。例如,假設我們想要重命名一個目標。右擊該名稱,然後單擊 Rename in file。引用了該目標名稱的整個文件中將會出現方框。現在我們可以編輯該目標的名稱,更改將會反映到整個文件中。該特性甚至也適用於屬性名稱。

圖 7. 重命名目標

標記出現

單擊頂部的 Toggle mark occurrences 按鈕可打開或關閉 Mark Occurrences 特性。若該特性是打開的,那麼當我們單擊任何目標或屬性的名稱時,整個文件中該目標或屬性的所有出現都會被突出顯示(見圖 8)。

圖 8. 標記目標的出現

只顯示所選擇的元素

單擊 Show selected elements only 按鈕(見圖 9)只會顯示所選擇的元素。當我們必須編寫一個大的目標定義,但是不想看到混亂的情況時,該功能尤其有用。我們可以單擊該按鈕來使得其他的文件元素消失,從而將注意力集中於當前目標。

圖 9. 只顯示當前目標

標記問題

Ant 編輯器可以在我們鍵入內容時顯示構建文件中的錯誤和警告。這有助於及早識別構建文件中的錯誤和潛在的問題,而不是等到以後再去找出構建期間出現錯誤的原因。

要看到該特性發揮作用,轉到 build.xml 中的 project 標記。在 default 目標的值中,鍵入構建文件中不存在的目標的名稱。會出現一個帶紅色波浪線記號(marker)的 project 標記(見圖 10)。將鼠標懸停在波浪線記號上,會出現一個窗口,指出默認的目標不存在於該項目中。一個紅色的 X 圖標將出現在記號的左邊。

圖 10. Ant 編輯器顯示一個錯誤

另外注意編輯器窗口右邊的條形區域(bar)。這裡顯示文件中的所有錯誤和警告。一旦錯誤或警告出現在文件中,一個相應的紅色或黃色記號就會放在條形區域的適當位置。單擊記號導航到錯誤的位置。這可以讓我們觀察到文件的什麼地方有錯誤或警告以及有多少,從而可以容易地導航到這些錯誤或警告。在條形區域的頂部也有一個方框,它在文件中出現錯誤時就會變紅。因此,只要看看這個方框,就可以立即確定文件是否正確。

通過完成以下步驟,我們可以更改 Ant 編輯器處理問題的方式。

單擊 Window > Preferences

展開 Ant,然後展開 Editor

在 Preferences 窗口,單擊 Problems 選項卡(見圖 11)。

圖 11. 配置問題如何出現在 Ant 中

選擇我們的選項。選中 Ignore all buildfile problems 復選框會完全禁用錯誤檢查。默認情況下,Eclipse 將每個 XML 文件都看作 Ant 構建文件,所以它會試圖查找這些文件中的錯誤。然而,如果您有一些 XML 文件,並且不想對它們檢查錯誤,那麼請在 Names 框中指定它們的名稱。

在 Names 框下面,可以看到 Ant 編輯器可以檢測的錯誤種類,我們可以分別為這些種類設置苛刻程度:Ignore、Warning 和 Error。從錯誤類型邊上的列表選擇 Warning 將指出可能 創建潛在問題的代碼。選擇 Error 指出代碼明確 具有的問題的類型。如果您覺得有些問題限制您編寫代碼的方式,您可以選擇 Ignore,盡管我不推薦這麼做。

注意:條形區域也適用於 Mark Occurrences 特性。打開 Mark Occurrences 並單擊任何目標名稱。對應於每個引用的位置,條形區域具有一些小小的黃色記號。單擊記號導航到該引用。

導航構建文件

Eclipse 提供幾種方法來幫助容易地導航巨大的構建文件。例子包括超鏈接和功能鍵導航,以及兩個視圖:Outline 和 Ant。

超鏈接和功能鍵導航

按 Ctrl 鍵,並將鼠標懸停在任何目標或屬性的名稱上。名稱就變成了超鏈接(見圖 12)。單擊該超鏈接會把我們帶到該目標或屬性的聲明。

圖 12. 目標引用變成超鏈接

我們也可以按 F3 來轉到該目標或屬性的聲明。通過展開 General,然後展開 Keys 以訪問 Keys preferences 頁面,可以更改快捷鍵。

Outline 視圖

顧名思義,Outline 視圖展示構建文件的整個大綱(見圖 13)。我們可以容易地看到文件中定義的所有目標和屬性。內部目標和公共目標具有不同的圖標,因而很容易區分。甚至默認的目標也突出顯示了。展開任何目標將顯示該目標中的所有任務。單擊 Outline 視圖中的任何元素可直接導航到該元素。視圖頂部有幾個按鈕,通過這些按鈕可以進行過濾,即對條目進行排序或者隱藏內部目標、屬性、導入的元素和頂層元素。

圖 13. Outline 視圖

我們也可以從 Outline 視圖運行和調試目標。為此,右擊 Outline 視圖中的一個目標,然後單擊 Run As(或 Debug As)> ANT Build。

Ant 視圖

很多時候,您會發現自己在處理多個項目中的多個腳本。所以取代在 Navigator 或 Package Explorer 視圖中或者在 External Tools 工具欄列表中尋找構建文件,Eclipse 工作人員創建了 Ant 視圖,使得一切一目了然(見圖 14)。

圖 14. Ant 視圖

首先,單擊 Window > Show View > Other > Ant > Ant 打開 Ant 視圖。在剛打開時,視圖是空的,所以我們必須向其中添加一些構建文件。單擊 + 按鈕打開一個窗口,在該窗口中,我們可以從工作區中打開的項目選擇構建文件。通過選擇一個目標並單擊 Run,或者通過右擊目標並單擊 Run as > Ant Build,來運行該目標。

我們也可以使用 Ant 的搜索特性來添加構建文件。單擊工具欄上的 Flashlight 圖標,就會出現一個窗口,我們可以在該窗口中指定將要搜索的文件的名稱。可在文件名中使用特殊字符 *(星號)或 ?(問號)來分別代表任何字符串 或任何字符。例如,鍵入 build*.xml 會匹配所有以單詞 build 打頭的 XML 文件名。如果沒選中 Include buildfile containing errors 復選框,包含錯誤的文件就不會被選擇。最後,可以選擇在整個工作區中搜索還是只在一個工作集中搜索。

要從 Ant 視圖刪除文件,可選擇該文件並單擊 Remove。單擊 Remove All 將清除整個視圖。

Ant 視圖與 Outline 視圖之間的區別

很多人在第一次打開 Ant 視圖時,會把它誤認為是帶有多個文件的 Outline 視圖。但是兩者之間其實存在著好些細微的區別。Outline 視圖設計來幫助我們導航當前文件,而 Ant 視圖則用於管理多個構建腳本中的多個目標的運行和調試,這些構建腳本可能分布於整個工作區內。

當我們詳細了解兩個視圖中提供的特性時,這一基本區別將更為明顯。

我們可以向 Ant 視圖添加多個文件,而 Outline 視圖只顯示當前文件的大綱。

在 Outline 視圖中雙擊一個目標將會導航到編輯器中的相應聲明,而在 Ant 視圖中這麼做會實際運行該目標。

Ant 視圖不顯示任何屬性或頂層元素,因為我們無法 “運行” 屬性。

Outline 視圖和 Ant 視圖都包含 Hide internal targets 按鈕,單擊該按鈕可以隱藏所有不是公共的目標,但是兩種視圖提供該按鈕的目的不同。所以,Outline 視圖提供該按鈕只是作為另一種過濾視圖的方式,而 Ant 視圖提供該按鈕是因為我們通常只會運行公共的目標,它使得從視圖隱藏內部目標變得有意義。

調試 Ant 文件

您實際上可以在 Eclipse 中像調試 Java 文件一樣地調試 Ant 文件,所有標准的調試特性都可用。這可能是 Eclipse Ant 集成中最好的功能。

在目標中放置斷點

就像對 Java 文件所做的一樣,我們在目標中的代碼行上放置斷點,這些代碼行調用了我們要單步調試的任務。要在代碼行上放置斷點,只要在代碼行左邊的灰色條形區域上單擊即可。出現一個綠色的球,表明斷點已經設置好(見圖 15)。通過在 Breakpoints 視圖中單擊或禁用斷點,可以臨時地啟用或禁用斷點。被禁用的斷點顯示為白色的球。注意,與 Java 斷點不同,我們不能在斷點上設置命中次數或條件 —— 我們在調試 Ant 文件時不需要用到它們。

圖 15. 構建文件中的代碼行上設置的斷點

調試構建文件

現在開始調試。在 Ant 視圖或 Outline 視圖中右擊一個目標,然後單擊 Debug As > Ant Build。與調試 Java 文件一樣,當執行到達我們設置了斷點的代碼行時,構建文件就會暫停。

下面是重要的部分:單擊 Debug 視圖中的 Step Over 按鈕,單步通過構建文件中的代碼行,就像單步通過 Java 語句一樣(見圖 16)。當我們單步通過每個任務時,任務將被執行並產生輸出,我們查看這個輸出可以看到構建過程中出了什麼錯。Run to Line 功能也是可用的,所以我們可以右擊一行代碼並單擊 Run to Line,以暫停構建文件的執行,直到到達這個特定的行才繼續執行。這個過程類似於在一個一旦到達就會被刪除的代碼行上設置臨時斷點。

圖 16. 單步通過構建文件中的代碼行

Debug 視圖顯示當前正在執行的任務的調用堆棧。如果一個任務調用另一個目標 —— 即 antcall —— 那麼該目標就會出現在調用堆棧中的當前任務之上。

還有一個 Variables 視圖是可用的(見圖 17)。打開該視圖可看到所有的 Ant 屬性,這些屬性是變量的 Ant 等價物。屬性分組在三個部分中:

System properties:從系統中為構建設置的屬性

User properties:諸如使用 -D 選項設置的屬性

Runtime properties:在運行時設置的構建文件中定義的屬性

圖 17. Variables 視圖顯示所有屬性

注意,與 Java 調試器不一樣,Ant 調試器不允許我們更改 Variables 視圖中顯示的屬性的值。

使用 Ant 構建文件作為項目構建器

在使用 Eclipse Java IDE 時,我們不知不覺也使用了 Java Builder。每當我們保存文件時,Java Builder 就會在後台默默地運行,並立即對這些文件進行編譯。

盡管 Java Builder 似乎並不偉大,但是它是 Eclipse 最重大的特性之一:Java Builder 允許我們完全跳過編譯過程,因為我們的程序總是 處於已編譯狀態,即使它充滿了錯誤亦是如此。因此,我們可以在鍵入之後立即運行 Java 程序,無需首先通過一個漫長而乏味的編譯過程。該功能為 Eclipse 用戶省去了大量的時間和爭論,也是 Eclipse 能夠在程序員中廣泛流行的原因之一。

但是如果我們想要做編譯文件以外的事情呢?如果我們想要為整個項目創建一個 jar 文件,並且在每次修改項目時將該文件復制到一個特定的目錄呢?如果我們想要所有這些都發生在後台,無需每次都告訴 Eclipse 呢?我們完全可以坐下來、放松、編寫一些代碼、喝杯咖啡,讓 Eclipse 在後台處理復雜的構建過程,甚至無需知道這個過程正在後台進行。

聽起來是不是像做夢呀?不是做夢。我們可以真正做到這樣的事情。我們只需要將一個 Ant 構建文件作為 “構建器” 添加到我們的項目即可,這個構建文件中定義了構建過程的所有復雜性。這樣做之後,魔術將開始上演。

為什麼使用 Ant 作為項目構建器

假設我們有一個 Ant 構建文件,它從項目中的類文件創建了一個 jar 文件,然後我們把這個 jar 文件放置在項目的根目錄中。(構建文件的確切內容現在還不用管。)我們想要在每次修改了 Java 文件時這個構建文件都會運行,所以 jar 文件總是保持最新。完成以下步驟:

右擊 Package Explorer 視圖中的項目並單擊 Properties。

展開 Builders 並單擊 New,向項目添加一個新的構建器。

在出現的窗口中,選擇 Ant Build 並單擊 OK。

出現構建器的 Properties 窗口(見圖 18)。在該窗口中配置構建器。

圖 18. 構建器配置窗口

在 Name 框中,鍵入 MyBuilder。

單擊 Buildfile 下的 Browse Workspace 並從項目選擇構建文件。

單擊 Base Directory 下的 Browse Workspace 並選擇包含該構建文件的項目。為構建文件提供參數,但是因為我們現在還不需要提供,所以將它保留為空。

單擊 Refresh 選項卡(見圖 19)。

刷新項目讓 Eclipse Workbench 查看諸如 Ant 之類的外部工具在本地文件系統中對項目所作的更改。所以這裡,告訴 Eclipse 是否在構建腳本完成後執行刷新,如果執行的話,應該刷新工作區的哪些部分。

圖 19. Refresh 選項卡

選中 Refresh resources upon completion 復選框。這會啟用該選項卡上這個復選框下的選項。告訴 Eclipse 刷新多少工作區。選擇滿足工作區的最小的實體,以快速地繼續運行。對於本例來說,我們只需要刷新當前項目,所以選擇 The project containing the selected resource 選項。

單擊 Targets 選項卡。

圖 20. Targets 選項卡

在這裡,我們選擇構建文件何時真正運行,更具體來說,運行哪個目標。有四個選項:

After a "Clean" —— 每當我們在項目上執行一個清除操作時,目標就會運行。

Manual Build —— 在自動構建被關閉的時候使用該選項。每當我們執行手動構建時,指定的目標就將運行。

Auto-Build —— 每當執行自動構建時,目標就會運行。一般來說,就是每當我們保存 Java 文件時。

During a "Clean" —— 該選項與 After a "Clean" 選項不同,因為目標是在清除操作本身期間被調用。使用該選項在清除操作期間執行一些定制的文件清除。

設置目標,准備運行。每個目標選項的旁邊都有一個 Set Targets 按鈕,使用該按鈕可以在每個操作期間設置目標准備運行。一般來說,這裡選擇默認的目標,但是我們可以選擇任何目標,甚至可以按其運行的順序選擇多個目標。

為我們想要構建文件運行的任何操作定義將要運行的目標。

在本例中,因為我們想要 jar 文件總是保持最新,所以為 After a "Clean" 或 Auto Build 操作設置目標。為此,單擊 Set Targets,然後選擇將執行的目標。如果看到為任何操作(比如 Manual Build)定義的目標,則單擊 Set Targets 並清除這些目標的復選框,以禁止構建文件在這些操作期間運行。

另外還要注意,盡管本例中我們選擇在每個 Auto Build 操作之後運行目標,但是通常我們應該小心使用該選項,因為如果構建過程要花很長時間的話,Workbench 會慢到停下來。一般來說,只設置 Manual Build 和 After a "Clean" 選項。

單擊 OK。

現在應該測試我們新添加的構建器了。打開項目中的任何 Java 文件,做一些修改(本例中插入了一個空格)並保存。Auto Build 將會運行,我們將會在控制台中看到構建文件正在運行選中的目標。jar 文件構建好了,並出現在 Navigator 或 Package Explorer 視圖中。所有這個過程每次都是自動發生的。

結束語

您已經看到,Eclipse 提供一個強大的環境,用於編寫、調試和導航 Ant 構建腳本。它甚至允許您使用 Ant 作為項目構建器,所以 Ant 文件可以在後台自動執行。現在您可以在 Eclipse 中嘗試構建腳本了。

我建議您通過編寫一個 Ant 構建腳本並將它用作項目構建器,來自己探索本文描述的特性。此外,不要忘了手頭擁有一本 Ant 參考手冊,在編寫自己的構建腳本時隨手翻看所有可用任務的描述。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved