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