Apache Maven 介紹
陳科肇
================
1.什麼是Maven
2.Maven的約定配置
3.基於Maven外掛的全域性性重用
4.一個“專案”的概念模型
=====================================================================
1.什麼是Maven
Maven 是一個專案管理工具,包含了一個專案物件模型(Project Object Model | POM),一組標準集合,一個專案週期(Project Lifecycle),一個依賴管理系統(Dependency Manaagement System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。當你使用Maven的時候,你可以一個明確的專案物件來描述的專案,然後就可以用Maven的橫切邏輯了,這些邏輯來自一組共享的(或自定義的)外掛。
其含括了構件工具的功能。
2.Maven的約定配置
Maven在預設的情況下,原始碼是放在src/main/java,資原始檔是放在src/main/resources,而測試則是放在src/main/test目錄下。如果專案會產生一個jar檔案,則Maven會把你想要編譯好的位元組碼放到target/calsses,並在target建立一個可釋出的jar檔案。Maven的約定配置不僅僅是約定了目錄的結構位置,Maven的核心外掛使用了一組通用的約定,可以用來編譯原始碼,打包可分發的構件,生成web站點,及其的其它過程。
如果你遵循這些預設的約定,Maven只需要幾乎為零的工作--僅僅將你的原始碼放到正確的目錄下。
3.基於Maven外掛的全域性性重用
Maven 的核心其實不做什麼實際的事情,除了解析一些 XML 文件,管理生命週期與插
件之外,它什麼也不懂。Maven 被設計成將主要的職責委派給一組 Maven 外掛,這些
外掛可以影響 Maven 生命週期,提供對目標的訪問。絕大多數 Maven 的動作發生於
Maven 外掛的目標,如編譯原始碼,打包二進位制程式碼,釋出站點和其它構建任務。你從
Apache 下載的 Maven 不知道如何打包 WAR 檔案,也不知道如何執行單元測試,Maven
大部分的智慧是由外掛實現的,而外掛從 Maven 倉庫獲得。事實上,第一次你用全新
的 Maven 安裝執行諸如 mvn install 命令的時候,它會從中央 Maven 倉庫下載大部
分核心 Maven 外掛。這不僅僅是一個最小化 Maven 分發包大小的技巧,這種方式更能
讓你升級外掛以給你專案的構建提高能力。Maven 從遠端倉庫獲取依賴和外掛的這一事
實允許了構建邏輯的全域性性重用。
4.一個“專案”的概念模型
Maven 維護了一個專案的模型,你不僅僅需要把原始碼編譯成位元組碼,你還需要開發軟
件專案的描述資訊,為專案指定一組唯一的座標。你要描述專案的的屬性。專案的許可
證是什麼?誰開發這個專案,為這個專案做貢獻?這個專案依賴於其它什麼專案沒有?
Maven不僅僅是一個“構建工具”,它不僅僅是在類似於 make 和 Ant 的工具的基礎上
的改進,它是包含了一組關於軟體專案和軟體開發的語義規則的平臺。這個基於每一個
專案定義的模型實現瞭如下特徵:
依賴管理--
由於專案是根據一個包含組識別符號,構件識別符號和版本的唯一的座標定義的。項
目間可以使用這些座標來宣告依賴。
遠端倉庫--
和專案依賴相關的,我們可以使用定義在專案物件模型(POM)中的座標來建立
Maven 構件的倉庫。
全域性性構建邏輯重用--
外掛被編寫成和專案模型物件(POM)一起工作,它們沒有被設計成操作某一個
已知位置的特定檔案。一切都被抽象到模型中,外掛配置和自定義行為都在模型
中進行。
工具可移植性/整合--
像 Eclipse,NetBeans,和 InteliJ 這樣的工具現在有共同的地方來找到專案
的資訊。在 Maven 出現之前,每個 IDE 都有不同的方法來儲存實際上是自定義
專案物件模型(POM)的資訊。Maven 標準化了這種描述,而雖然每個 IDE 仍然
繼續維護它的自定義專案檔案,但這些檔案現在可以很容易的由模型生成。
便於搜尋和過濾構件--
像 Nexus 這樣的工具允許你使用儲存在 POM 中的資訊對倉庫中的內容進行索引
和搜尋。