介紹
Maven是意第緒語(yǔ),意為知識(shí)的積累,最初是為了簡(jiǎn)化Jakarta Turbine項(xiàng)目中的構(gòu)建過程。有幾個(gè)項(xiàng)目,每個(gè)項(xiàng)目都有自己的Ant構(gòu)建文件,所有項(xiàng)目都略有不同。JAR已檢入CVS。我們想要一個(gè)標(biāo)準(zhǔn)的方式來構(gòu)建項(xiàng)目,明確定義項(xiàng)目的組成,一種簡(jiǎn)單的方式來發(fā)布項(xiàng)目信息,以及一種在多個(gè)項(xiàng)目之間共享JAR的方式。
結(jié)果是一個(gè)可以用于構(gòu)建和管理任何基于Java的項(xiàng)目的工具。我們希望我們已經(jīng)創(chuàng)建了一些東西,可以使Java開發(fā)人員的日常工作變得更輕松,并且通常有助于理解任何基于Java的項(xiàng)目。
Maven的目標(biāo)
Maven的主要目標(biāo)是使開發(fā)人員能夠在最短的時(shí)間內(nèi)理解開發(fā)工作的完整狀態(tài)。為了實(shí)現(xiàn)此目標(biāo),Maven處理了幾個(gè)令人關(guān)注的領(lǐng)域:
- 簡(jiǎn)化構(gòu)建過程
- 提供統(tǒng)一的構(gòu)建系統(tǒng)
- 提供優(yōu)質(zhì)的項(xiàng)目信息
- 鼓勵(lì)更好的開發(fā)實(shí)踐
簡(jiǎn)化構(gòu)建過程
盡管使用Maven不會(huì)消除對(duì)底層機(jī)制的了解,但Maven確實(shí)使開發(fā)人員免受許多細(xì)節(jié)的困擾。
提供統(tǒng)一的構(gòu)建系統(tǒng)
Maven使用其項(xiàng)目對(duì)象模型(POM)和一組插件來構(gòu)建項(xiàng)目。一旦熟悉了一個(gè)Maven項(xiàng)目,便知道所有Maven項(xiàng)目是如何構(gòu)建的。這樣可以節(jié)省瀏覽多個(gè)項(xiàng)目時(shí)的時(shí)間。
提供優(yōu)質(zhì)的項(xiàng)目信息
Maven提供了有用的項(xiàng)目信息,這些信息部分來自您的POM,部分來自項(xiàng)目源。例如,Maven可以提供:
- 更改直接從源代碼管理創(chuàng)建的日志
- 交叉引用來源
- 項(xiàng)目管理的郵件列表
- 項(xiàng)目使用的依賴項(xiàng)
- 單元測(cè)試報(bào)告,包括覆蓋范圍
第三方代碼分析產(chǎn)品還提供了Maven插件,可將其報(bào)告添加到Maven提供的標(biāo)準(zhǔn)信息中。
提供最佳實(shí)踐開發(fā)指南
Maven的目的是收集有關(guān)最佳實(shí)踐開發(fā)的最新原則,并使其易于朝著這個(gè)方向進(jìn)行指導(dǎo)。
例如,單元測(cè)試的規(guī)范,執(zhí)行和報(bào)告是使用Maven的常規(guī)構(gòu)建周期的一部分。當(dāng)前的單元測(cè)試最佳實(shí)踐被用作準(zhǔn)則:
- 將測(cè)試源代碼保存在單獨(dú)但并行的源樹中
- 使用測(cè)試用例命名約定來定位和執(zhí)行測(cè)試
- 讓測(cè)試用例設(shè)置其環(huán)境,而不是自定義構(gòu)建以進(jìn)行測(cè)試準(zhǔn)備
- Maven還協(xié)助項(xiàng)目工作流程,例如發(fā)布和問題管理。
Maven還建議一些有關(guān)如何布局項(xiàng)目目錄結(jié)構(gòu)的準(zhǔn)則。一旦學(xué)習(xí)了布局,就可以輕松瀏覽使用Maven的其他項(xiàng)目。
盡管采用了自以為是的方法來進(jìn)行項(xiàng)目布局,但由于歷史原因,某些項(xiàng)目可能不適合此結(jié)構(gòu)。盡管Maven旨在靈活地適應(yīng)不同項(xiàng)目的需求,但它不能在不影響其目標(biāo)的情況下適應(yīng)每種情況。
如果您的項(xiàng)目具有無(wú)法重組的異常構(gòu)建結(jié)構(gòu),則可能必須放棄某些功能或完全使用Maven。
什么不是Maven?
您可能聽說過有關(guān)Maven的以下一些事情:
- Maven是站點(diǎn)和文檔工具
- Maven擴(kuò)展了Ant以允許您下載依賴項(xiàng)
- Maven是一組可重用的Ant腳本
在Maven執(zhí)行這些操作的同時(shí),您可以在上面的“什么是Maven?”中閱讀到。部分,這些并不是Maven唯一的功能,并且它的目標(biāo)是完全不同的。