Maven入門(4)

Maven 除了以程序構建能力爲特色之外,還提供 Ant 所缺少的高級項目管理工具。由於 Maven 的缺省構建規則有較高的可重用性,所以常常用兩三行 Maven 構建腳本就可以構建簡單的項目,而使用 Ant 則需要十幾行。事實上,由於 Maven 的面向項目的方法,許多 Apache Jakarta 項目現在使用 Maven,而且公司項目採用 Maven 的比例在持續增長。

Maven vs Ant

那麼,Maven 和 Ant 有什麼不同呢?在回答這個問題以前,我要強調一點:Maven 和 Ant 針對構建問題的兩個不同方面。Ant 爲 Java 技術開發項目提供跨平臺構建任務。Maven 本身描述項目的高級方面,它從 Ant 借用了絕大多數構建任務。因此,由於 Maven 和 Ant 代表兩個差異很大的工具,所以我將只說明這兩個工具的等同組件之間的區別,如表 1 所示。

表 1. Maven vs Ant


Maven Ant
標準構建文件 project.xml 和 maven.xml build.xml
特性處理順序
  1. ${maven.home}/bin/driver.properties
  2. ${project.home}/project.properties
  3. ${project.home}/build.properties
  4. ${user.home}/build.properties
  5. 通過 -D 命令行選項定義的系統特性
最後一個定義起決定作用。
  1. 通過 -D 命令行選項定義的系統特性
  2. 由 <property> 任務裝入的特性
第一個定義最先被處理。
構建規則 構建規則更爲動態(類似於編程語言);它們是基於 Jelly 的可執行 XML。 構建規則或多或少是靜態的,除非使用 <script> 任務。(請參閱 參考資料以獲得相關教程。)
擴展語言 插件是用 Jelly(XML)編寫的。 插件是用 Java 語言編寫的。
構建規則可擴展性 通過定義 <preGoal> 和 <postGoal> 使構建 goal 可擴展。 構建規則不易擴展;可通過使用 <script> 任務模擬<preGoal> 和 <postGoal> 所起的作用。

既然您瞭解了 Maven 和 Ant 之間的區別,讓我們來研究 Maven 的主要組件,如圖 1 所示。


圖 1. Maven 的主要組件 
Maven 的主要組件 

項目對象模型

項目對象模型(Project Object Model,POM)描述項目的各個方面。儘管對於 POM 的物理表示沒有內在的限制,但 Maven 開發人員通常使用一個 XML 項目文件(project.xml)。該 XML 文件格式由位於 Maven 安裝目錄中的 XML 模式(maven-project.xsd)定義。

通常,project.xml 文件由三個主要部分組成:

  • 項目管理部分包括項目的組織、開發人員名單、源代碼位置和錯誤跟蹤系統 URL 等信息。
  • 項目相關性部分包括關於項目相關性的信息。當前 Maven 實現(1.0 beta 測試版 8)僅支持 JAR 文件相關性。
  • 項目構建和報告部分包含項目構建信息(如源代碼目錄、單元測試用例目錄)和要在構建中生成的報告。

清單 1 顯示了帶註釋的樣本 project.xml 文件。因爲 project.xml 文件中的許多元素都是可選的,所以,隨着您對 Maven 理解的加深,可以逐步使用不同的 Maven 特性。 注:在以下代碼中,可選的元素都以“可選的(OPTIONAL)”標明。

主文檔包含項目的唯一標識和組標識。事實證明,當項目包括多個子項目時,組標識非常有用。所有的子項目應共享同一組標識,但每個子項目應有不同的 <id> 。


表 2. 項目相關性部分

groupId 告訴 Maven 資源庫內哪個子目錄中包含相關性文件。
artifactId 告訴 Maven 該構件的唯一標識。
version 表示相關性的版本號。
jar (可選的)表示相關性的 JAR 文件。在絕大多數情況下,可以從相關性的 <artifactId> 和 <version> 構造 JAR 文件的名稱。
type (可選的)相關性的類型;如 jar 和分發版等。缺省值是 jar。
url (可選的)相關性項目的 URL,在相關性是在因特網上找到的第三方庫時非常有用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章