好程序員Java培訓(xùn)分享maven-概述一、為什么要使用Maven,在沒有Maven之前我們的開發(fā)存在的問題 項(xiàng)目如果需要引入第三方的開源庫(kù)就必須去官方網(wǎng)站或別的途徑去下載jar包,然后將下載襲來的jar包必須手動(dòng)復(fù)制,粘貼到WEB-INF/lib目錄下,當(dāng)某些jar包有依賴的時(shí)候,還要去下載對(duì)應(yīng)的依賴jar包,如果不小心漏掉了,程序運(yùn)行直接出錯(cuò) jar包去哪里下? 要對(duì)jar包升級(jí)怎么辦? jar包依賴沖突了怎么辦? 然后項(xiàng)目寫完之后,我們需要對(duì)項(xiàng)目進(jìn)行編譯,測(cè)試,打包,部署等一系列工作,操作起來都不是特別的簡(jiǎn)潔,所以這個(gè)時(shí)候Maven就出現(xiàn)了 二、什么是Maven Maven是一個(gè)采用純Java編寫的開源項(xiàng)目管理工具, Maven采用了一種被稱之為Project Object Model (POM)概念來管理項(xiàng)目,所有的項(xiàng)目配置信息都被定義在一個(gè)叫做POM.xml的文件中 POM怎么理解? 我們使用Java是面向?qū)ο缶幊?,?duì)象就是我們的類 而Maven是面向項(xiàng)目,把我們的項(xiàng)目看做成是一個(gè)對(duì)象來進(jìn)行管理 是一個(gè)跨平臺(tái)的項(xiàng)目管理工具,主要服務(wù)于Java平臺(tái)的項(xiàng)目構(gòu)建、依賴管理和項(xiàng)目信息管理。 項(xiàng)目構(gòu)建:通過插件幫你完成項(xiàng)目的清理、編譯、測(cè)試、打包、部署。比如之前除了編寫源代碼,我們每天有相當(dāng)一部分時(shí)間花在了編譯、運(yùn)行單元測(cè)試、生成文檔、打包和部署等繁瑣而又不得不做的工作上 依賴管理:通過坐標(biāo)從maven倉(cāng)庫(kù)導(dǎo)入java類庫(kù)(jar文件)。比如之前項(xiàng)目導(dǎo)入jar。是通過copy方式導(dǎo)入項(xiàng)目中,而且還會(huì)存在jar之間的依賴和沖突。而maven解決了這些問題,幫我們下載Jar包 倉(cāng)庫(kù)管理:提供統(tǒng)一管理所有 Jar 包的工具; 項(xiàng)目信息管理:項(xiàng)目描述、開發(fā)者列表、版本控制系統(tǒng)地址等。比如發(fā)布版本之后我們可能還要對(duì)版本進(jìn)行升級(jí) 三、其它流行的構(gòu)建工具(了解) 在Java的世界里,目前在被使用的常用構(gòu)建工具有三個(gè):Ant,Maven,Gradle。 Ant的核心是由Java編寫,采用XML作為構(gòu)建腳本,這樣就允許你在任何環(huán)境下,運(yùn)行構(gòu)建。Ant基于任務(wù)鏈思想,任務(wù)之間定義依賴,形成先后順序。缺點(diǎn)是使用XML定義構(gòu)建腳本,導(dǎo)致腳本臃腫,Ant自身沒有為項(xiàng)目構(gòu)建提供指導(dǎo),導(dǎo)致每個(gè)build腳本都不一樣,開發(fā)人員對(duì)于每個(gè)項(xiàng)目都需要去熟悉腳本內(nèi)容,沒有提供在Ant生態(tài)環(huán)境內(nèi)的依賴管理工具。 Maven團(tuán)隊(duì)意識(shí)到Ant的缺陷,采用標(biāo)準(zhǔn)的項(xiàng)目布局,和統(tǒng)一的生命周期,采用約定由于配置的思想,減少構(gòu)建腳本需要的編寫內(nèi)容,活躍的社區(qū),可以方便找到合適的插件,強(qiáng)大的依賴管理工具。缺點(diǎn)是采用默認(rèn)的結(jié)構(gòu)和生命周期,太過限制,編寫插件擴(kuò)展麻煩,XML作為構(gòu)建腳本。 而Gradle同時(shí)擁有Ant和Maven的優(yōu)點(diǎn),它是基于Groovy的DSL,提供聲明式的構(gòu)建語(yǔ)言,采用標(biāo)準(zhǔn)的項(xiàng)目布局,但擁有完全的可配置性,就是可以改,通過插件,提供默認(rèn)的構(gòu)建生命周期,也可以自己定義任務(wù),單獨(dú)運(yùn)行任務(wù),定義任務(wù)間的依賴,強(qiáng)大的依賴管理工具,與Maven和Ivy倉(cāng)庫(kù)結(jié)合,與Ant天生兼容,有效的重用Ant的任務(wù),多種實(shí)現(xiàn)插件的方式,強(qiáng)大的官方插件庫(kù),從構(gòu)建級(jí)別,支持從Ant或者Maven的逐步遷移,通過包裝器,無縫的在各個(gè)平臺(tái)運(yùn)行。 如何識(shí)別項(xiàng)目構(gòu)建工具,一般來說,一個(gè)項(xiàng)目的根目錄中就會(huì)包含構(gòu)建工具的配置文件信息,也表明了該項(xiàng)目使用的構(gòu)建工具,通常有如下的對(duì)應(yīng)關(guān)系 build.xml - 該項(xiàng)目使用Ant構(gòu)建 pom.xml - 該項(xiàng)目使用Maven構(gòu)建 build.gradle - 該項(xiàng)目使用Gradle構(gòu)建 |
|