關(guān)于maven你能回答出這些嗎?
hello,大家好。高考已結(jié)束了好幾天了,即將迎來中考了,預(yù)祝所有中考學(xué)生都能考出理想成績。
1、什么是maven?
maven主要服務(wù)于基于java平臺的項目構(gòu)建,依賴管理和項目信息管理。
maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔的項目管理工具軟件。它包含了一個項目對象模型,一組標(biāo)準(zhǔn)集合,一個項目生命周期,一個依賴管理系統(tǒng)和用來運(yùn)行定義在生命周期階段中插件目標(biāo)的邏輯。當(dāng)使用Maven的時候,你用一個明確定義的項目對象模型來描述你的項目,然后Maven可以應(yīng)用橫切的邏輯,這些邏輯來自于一組共享的(或自定義的)插件。
2、maven能為我們解決什么問題?
添加第三方j(luò)ar包
按照最原始的做法,我們是手動復(fù)制jar包到項目WEB-INF/lib下,每個項目都會有一份,造成大量重復(fù)文件。而Maven將jar包放在本地倉庫中統(tǒng)一管理,需要jar包只需要用坐標(biāo)的方式引用即可。
jar包之間的依賴關(guān)系
jar包之間往往不是獨(dú)立的,很多jar需要在其他jar包的支持下才能夠正常工作,稱為jar包之間的依賴關(guān)系。如果我們手動去導(dǎo)入,要知道jar包之間的依賴關(guān)系并一一導(dǎo)入是極其麻煩而且容易出錯的。如果使用Maven,它能夠?qū)?dāng)前jar包所依賴的其他所有jar包全部導(dǎo)入。
獲取第三方j(luò)ar包
開發(fā)過程中我們需要用到很多jar包,每個jar包在官網(wǎng)獲取的方式不盡相同,給工作帶來了額外困難。但是使用Maven可以以坐標(biāo)的方式依賴一個jar包,Maven從中央倉庫進(jìn)行下載,并同時下載這個jar包依賴的其他jar包。
將項目拆分為多個工程模塊
項目的規(guī)模越來越大,已經(jīng)不可能通過package結(jié)構(gòu)來劃分模塊,必須將項目拆分為多個工程協(xié)同開發(fā)。
3、maven自身有什么優(yōu)缺點(diǎn)嗎?
3.1優(yōu)點(diǎn)
簡化了項目依賴管理
易于上手,對于新手來說了解幾個常用命令即可滿足日常工作
便于與持續(xù)集成工具(jenkins)整合
便于項目升級,無論是項目本身還是項目使用的依賴
maven有很多插件,便于功能擴(kuò)展,比如生產(chǎn)站點(diǎn),自動發(fā)布版本等
為什么使用Maven中的各點(diǎn)
3.2缺點(diǎn)
Maven是一個龐大的構(gòu)建系統(tǒng),學(xué)習(xí)難度大。(很多都可以這樣說,入門容易[優(yōu)點(diǎn)]但是精通難[缺點(diǎn)])
Maven采用約定約定優(yōu)于配置的策略,雖然上手容易但是一旦出現(xiàn)問題,難于調(diào)試中網(wǎng)絡(luò)環(huán)境較差,很多repository無法訪問
4、知道m(xù)aven坐標(biāo)嗎?
Maven其中一個核心的作用就是管理項目的依賴,引入我們所需的各種jar包等。為了能自動化的解析任何一個Java構(gòu)件,Maven必須將這些Jar包或者其他資源進(jìn)行唯一標(biāo)識,這是管理項目的依賴的基礎(chǔ),也就是我們要說的坐標(biāo)。包括我們自己開發(fā)的項目,也是要通過坐標(biāo)進(jìn)行唯一標(biāo)識的,這樣才能讓其它項目中進(jìn)行依賴引用。
maven的坐標(biāo)通過groupId,artifactId,version唯一標(biāo)志一個構(gòu)件。
groupId通常為公司或組織名字,artifactId通常為項目名稱,versionId為版本號。
5、maven的生命周期是怎樣的?
Maven的 生命周期:從我們的項目構(gòu)建,一直到項目發(fā)布的這個過程。

各階段詳解:

6、熟悉哪些maven的命令?

7、知道怎么解決依賴傳遞引起的版本沖突?
可通過dependency的exclusion元素排除掉依賴。
8、那maven的依賴原則了解嗎?
最短路徑原則(依賴傳遞的路徑越短越優(yōu)先)
pom文件申明順序優(yōu)先(路徑長度一樣,則先申明的優(yōu)先)
覆寫原則(當(dāng)前pom文件里申明的直接覆蓋父工程傳過來的)
9、講述下依賴的解析機(jī)制?
當(dāng)依賴的范圍是 system 的時候,Maven 直接從本地文件系統(tǒng)中解析構(gòu)件。
根據(jù)依賴坐標(biāo)計算倉庫路徑,嘗試直接從本地倉庫尋找構(gòu)件,如果發(fā)現(xiàn)對應(yīng)的構(gòu)件,就解析成功。

10、那插件的解析機(jī)制呢?
與依賴的構(gòu)件一樣,插件也是基于坐標(biāo)保存在Maven倉庫中。在用到插件的時候會先從本地倉庫查找插件,如果本地倉庫沒有則從遠(yuǎn)程倉庫查找插件并下載到本地倉庫。
注意:
與普通的依賴構(gòu)件不同的是,Maven會區(qū)別對待普通依賴的遠(yuǎn)程倉庫與插件的遠(yuǎn)程倉庫。前面提到的配置遠(yuǎn)程倉庫只會對普通的依賴有效果。
當(dāng)Maven需要的插件在本地倉庫不存在時是不會去我們以前配置的遠(yuǎn)程倉庫查找插件的,而是需要有專門的插件遠(yuǎn)程倉庫。