大數(shù)據(jù)開發(fā):告訴你什么是Maven?
關(guān)于大數(shù)據(jù)開發(fā)的Maven可謂是一個(gè)略微復(fù)雜的構(gòu)成,從基礎(chǔ)概念到它的具體用途都可謂是有滿滿的干貨知識(shí)。這里先用一句話來進(jìn)行概括,Maven 是一個(gè)項(xiàng)目管理工具,可以對(duì) Java 項(xiàng)目進(jìn)行構(gòu)建、依賴管理,是一個(gè)自動(dòng)化構(gòu)建工具。
一、什么是Maven
Maven , 用于Java項(xiàng)目的構(gòu)建 , 依賴管理 , 項(xiàng)目信息管理的項(xiàng)目管理工具.是Apache組織旗下的開源項(xiàng)目.它的核心功能是一個(gè)具有跨平臺(tái)特性的構(gòu)建工具 , 幫助我們自動(dòng)化構(gòu)建 , 并提供一個(gè)完整的優(yōu)化的構(gòu)建生命周期模型 , 和構(gòu)建任務(wù)所需的基礎(chǔ)組件/插件.它還是一個(gè)依賴管理工具和項(xiàng)目信息管理工具 , 方便開發(fā)人員更好的管理依賴與避免項(xiàng)目信息混亂等問題.除此之外還提供了一套標(biāo)準(zhǔn)的約定規(guī)則 , 減輕不同項(xiàng)目的差異性.
二、Maven的作用
作用一:
個(gè)人理解maven主要是用來解決導(dǎo)入java類依賴的jar,編譯java項(xiàng)目主要問題。(最早手動(dòng)導(dǎo)入jar,使用Ant之類的編譯java項(xiàng)目)
以pom.xml文件中dependency屬性管理依賴的jar包,而jar包包含class文件和一些必要的資源文件。
當(dāng)然它可以構(gòu)建項(xiàng)目,管理依賴,生成一些簡單的單元測(cè)試報(bào)告,像現(xiàn)在公司的持續(xù)集成都廣泛的使用maven,當(dāng)你接觸一些項(xiàng)目以后你就會(huì)有更深的體會(huì)。
作用二:
比如之前項(xiàng)目導(dǎo)入jar。是通過copy方式導(dǎo)入項(xiàng)目中,而且還會(huì)存在jar之間的依賴和沖突。而maven解決了這些問題,只是網(wǎng)速不好的時(shí)候有點(diǎn)麻煩。只需要下載-bin.zip就可以了。
作用三:
jar 包管理,防止jar之間依賴起沖突 。小組之間建立個(gè)私服務(wù),大家都用通用 的maven配置文件,不用自己手動(dòng)去下載jar ,pom文件會(huì)自動(dòng)管理下載好的jar包。
作用四:
Maven是基于項(xiàng)目對(duì)象模型,可以通過一小段描述信息來管理項(xiàng)目的構(gòu)建,報(bào)告和文檔的軟件項(xiàng)目管理工具。Maven能夠很方便的幫你管理項(xiàng)目報(bào)告,生成站點(diǎn),管理jar文件,等等。例如:項(xiàng)目開發(fā)中第三方j(luò)ar引用的問題,開發(fā)過程中合作成員引用的jar版本可能不同,還有可能重復(fù)引用相同jar的不同版本,使用maven關(guān)聯(lián)jar就可以配置引用jar的版本,避免沖突。
三、Maven坐標(biāo)系統(tǒng)
Maven構(gòu)件 : 指的是平時(shí)項(xiàng)目打包完成后的的一些jar , war等文件.
Maven坐標(biāo)為各種構(gòu)件引入了秩序 , 任何一個(gè)構(gòu)件都必須明確定義自己的唯一坐標(biāo) ; 而一組Maven坐標(biāo)就是通過以下一組元素定義的 :
groupId : 定義當(dāng)前Maven項(xiàng)目隸屬的實(shí)際項(xiàng)目
artifactId : 定義實(shí)際項(xiàng)目中的一個(gè)Maven模塊/項(xiàng)目 , 推薦使用groupId作為artifactId的前綴
version : 定義Maven模塊/項(xiàng)目所處的版本 , Maven定義了一套完整的版本規(guī)范
packaging : 定義Maven模塊/項(xiàng)目的打包方式
classifier : 幫助定義一些與主構(gòu)件對(duì)應(yīng)的附屬構(gòu)件
Maven倉庫就是基于Maven的坐標(biāo)系統(tǒng)
四、Maven倉庫
得益于Maven的坐標(biāo)機(jī)制 , 任何Maven項(xiàng)目使用的任何一個(gè)"構(gòu)件"的方式都是相同的 ; 在此基礎(chǔ)上 , Maven可以在某個(gè)位置統(tǒng)一儲(chǔ)存所有Maven項(xiàng)目共享的"構(gòu)件" , 這就是倉庫 ; 因?yàn)閭}庫 , 所以Maven項(xiàng)目不再需要各自儲(chǔ)存依賴的"構(gòu)件" , 轉(zhuǎn)而只需聲明這些依賴的坐標(biāo) , 在需要的時(shí)候 , Maven會(huì)自動(dòng)根據(jù)坐標(biāo)找到倉庫中的"構(gòu)件" , 并使用它們.
倉庫的分類有兩種 , 本地倉庫與遠(yuǎn)程倉庫 ; 當(dāng)Maven根據(jù)坐標(biāo)尋找"構(gòu)件"的時(shí)候 , Maven會(huì)先查看本地倉庫 , 如果本地倉庫存在此構(gòu)件 , 則直接使用 ; 如果本地倉庫不存在此"構(gòu)件" , 或需要查看是否有更新的版本 , Maven就會(huì)去遠(yuǎn)程倉庫查找 , 當(dāng)發(fā)現(xiàn)所需的"構(gòu)件"后 , 就會(huì)下載到本地倉庫后再使用 ; 如果最終本地倉庫與遠(yuǎn)程倉庫都無法找到所需要的"構(gòu)件"時(shí) , Maven就會(huì)報(bào)錯(cuò)。
五、Maven構(gòu)建概念及過程
(1)構(gòu)建并不是創(chuàng)建,創(chuàng)建一個(gè)工程并不等于構(gòu)建一個(gè)項(xiàng)目,那么我們就從如下三個(gè)方面來了解構(gòu)建。
1.純Java代碼
Java是一門編譯型語言,.java擴(kuò)展名的源文件需要編譯成.class擴(kuò)展名的字節(jié)碼文件才能夠執(zhí)行。所以編寫任何Java代碼想要執(zhí)行的話就必須經(jīng)過編譯得到對(duì)應(yīng)的.class文件。
2.Web工程
當(dāng)我們需要通過瀏覽器訪問Java程序時(shí)就必須將包含Java程序的Web工程編譯的結(jié)果“拿”到服務(wù)器上的指定目錄下,并啟動(dòng)服務(wù)器才行。這個(gè)“拿”的過程我們叫部署。
我們可以這樣理解,為編譯的WEB工程是米,而編譯好的WEB工程是飯,這個(gè)編譯過程就是生米煮成熟飯。
3.實(shí)際項(xiàng)目
在實(shí)際項(xiàng)目中整合第三方框架,Web工程中不僅包含了Java程序和JSP頁面、圖片等靜態(tài)資源之外,還包括了第三方框架的jar包以及各種各樣的配置文件。所有這些資源都必須按照正確的目錄結(jié)構(gòu)部署到服務(wù)器上,項(xiàng)目才可以運(yùn)行。
因此,構(gòu)建就是以我們編寫的Java代碼、框架配置文件、國際化等其他資源文件、JSP頁面和圖片等靜態(tài)資源作為“原材料”,去“生產(chǎn)”出一個(gè)可以運(yùn)行的項(xiàng)目的過程。
(2)構(gòu)建環(huán)節(jié)
1.清理:刪除以前的編譯結(jié)果,為重新編譯做好準(zhǔn)備。
2.編譯:將Java源程序編譯為字節(jié)碼文件。
3.測(cè)試:針對(duì)項(xiàng)目中的關(guān)鍵點(diǎn)進(jìn)行測(cè)試,確保項(xiàng)目在迭代開發(fā)過程中關(guān)鍵點(diǎn)的正確性。
4.報(bào)告:在每一次測(cè)試后以標(biāo)準(zhǔn)的格式記錄和展示測(cè)試結(jié)果。
5.打包:將一個(gè)包含諸多文件的工程封裝為一個(gè)壓縮文件用于安裝或部署。Java工程對(duì)應(yīng)jar包,Web工程對(duì)應(yīng)war包。
6.安裝:在Maven環(huán)境下特指將打包的結(jié)果——jar包或war包安裝到本地倉庫中。
7.部署:將打包的結(jié)果部署到遠(yuǎn)程倉庫或?qū)ar包部署到服務(wù)器上運(yùn)行。
關(guān)于大數(shù)據(jù)開發(fā)-maven的基礎(chǔ)內(nèi)容也就是如此了,這其中包含大量的細(xì)節(jié)知識(shí),這種自動(dòng)化工具是真的很方便,大大的節(jié)省了我們的時(shí)間,提高了效率。所以對(duì)它做一個(gè)具體的了解,大大的提高它的利用率。