簡單介紹
Maven,在意第緒語中意為對知識的積累。Maven最初用來在Jakarta Turbine項目中簡化該項目的構建過程。
Jakarta Trubine項目有多個project。每一個project都有自己的多個Ant構建文件。
每一個project的這些構建文件都僅僅有一小部分不同。而且全部的Jar文件被使用CVS納入了版本號管理。我們想要實現一種標准方式去構建這些project、明白定義這些project的組成部分、簡單的公布project信息以及多個project間共享Jar包。
就這樣,一個能夠構建和管理不論什么基於java的project的工具誕生了。
我們希望我們做的這些事情能夠簡化Java開發人員日復一日的工作。並有助於他們對不論什么基於Java的項目的理解。
Maven的目標
Maven的主要目標是希望開發人員能在最短的時間內理解開發的完整狀態。為了達到這個目標,Maven在下面幾個方面做出了努力:
- 簡化構建過程
- 統一構建體系
- 提供高質量的項目信息
- 提供開發的最佳實踐指南
- 實現透明的向新特性的遷移
簡化構建過程
使用Maven不須要知道一些潛在的或底層的機制,Maven屏蔽了非常多細節。
統一構建體系
Maven通過使用project對象模型(project object model POM)以及一系列可共享的插件來構建project。僅僅要你熟悉了怎么構建一個Mavenproject。你就自然知道了怎么構建全部的Mavenproject。
這樣的統一的構建體系能夠節省大量的了解project結構的時間。
提供高質量的項目信息
Maven提供了非常多實用的project信息,這些信息一部分來自於project的POM文件,一部分來自原project源代碼。
Maven能夠提供下面信息:
- 從源代碼控制處生成的改動日志文檔
- 交叉引用源代碼
- 開發人員郵件列表
- 項目依賴列表
- 包括覆蓋率的單元測試報告
Maven改進了project信息的提供。全部這些信息對Maven用戶來說都是透明的。
Maven還同意其它人提供Maven插件來獲取project信息,與Maven獲取的標准信息相同處理。這些都須要基於POM來完畢。
提供開發的最佳實踐指南
Maven致力於收集現有的開發的最佳實踐原則,並以此來簡化project的開發。
比如:規范。運行,和單元測試報告是正常使用Maven構建周期的一部分。
眼下Maven中的單元測試最佳實踐例如以下:
- 將測試源代碼放在一個單獨的,但與主代碼同級的位置
- 使用測試用例命名規范來定位和運行測試
- 讓測試用例本身去設置測試環境,不要為了測試而專門構建環境
Maven 在project的文件夾結構上也給出了很多最佳實踐指南。遵守了這些project文件夾結構指南后。假設你了解了這樣的文件夾結構,你也就會easy的了解其它全部遵循了這樣的文件夾結構的Mavenproject。
實現透明的向新特性的遷移
Maven為使用者提供了一種簡單的方式去更新他們已經install的project,這使得用戶能夠獲取到基於Maven對project作出的不論什么變化。
基於以上原因。install新的project、從第三方或Maven本身更新插件變得非常easy和常見。
Maven不是什么?
你也許聽說過下面關於maven的描寫敘述:
- Maven是一個站點和文檔工具
- Maven繼承於Ant,能夠讓你下載project依賴
- Maven是一系列可復用的Ant腳本的集合
Maven確實做了以上這些事情,這能夠從“Maven是什么”一節中看到。
但這些不是Maven僅有的特性。mavan的目標不止於此。
Maven確實鼓舞最佳實踐,但因為一些歷史原因,我們對一些project的實現可能沒有遵循這些最佳實踐。盡管Maven被設計為有彈性的。在一定程度上,為了滿足不同project的須要,為了達到全部的目標。我們做出了一些妥協,以使Maven能滿足每一種情況。
假設你決定了使用Maven,可是你的project文件夾結構與Maven推薦的不一樣而你無法又一次組織,你可能須要放棄一些Maven特性,不能全然的使用Maven了。
原文來自於Maven官網:What is Maven?