maven面試題

一朝聋、Maven有哪些優(yōu)點和缺點

優(yōu)點如下:

簡化了項目構建.依賴管理:

易于上手,對于新手可能一個"mvn clean package"命令就可能滿足他的工作

便于與持續(xù)集成工具(jenkins)整合

便于項目升級冀痕,無論是項目本身升級還是項目使用的依賴升級。

有助于多模塊項目的開發(fā)僻他,一個模塊開發(fā)好后,發(fā)布到倉庫吨拗,依賴該模塊時可以直接從倉庫更新,而不用自己去編譯劝篷。

maven有很多插件,便于功能擴展娇妓,比如生產(chǎn)站點活鹰,自動發(fā)布版本等

缺點如下:

maven是一個龐大的構建系統(tǒng)峡蟋,學習難度大

maven采用約定優(yōu)于配置的策略(convention over configuration)华望,雖然上手容易,但是一旦出了問題赖舟,難于調(diào)試。

當依賴很多時宾抓,m2eclipse 老是搞得Eclipse很卡豫喧。

中國的網(wǎng)絡環(huán)境差,很多repository無法訪問紧显,比如google code缕棵, jboss 倉庫無法訪問等孵班。

二招驴、Maven坐標

一般maven使用[groupID,artifactId,version,packaging]來表示一個項目的某個版本别厘,有時還會使用classifier來表示項目的附屬構建,常見的附屬構建有javadoc和sources包触趴。

三、Maven常見的依賴范圍有哪些?

compile:編譯依賴冗懦,默認的依賴方式,在編譯(編譯項目和編譯測試用例)批狐,運行測試用例,運行(項目實際運行)三個階段都有效嚣艇,典型地有spring-core等jar。

test:測試依賴食零,只在編譯測試用例和運行測試用例有效,典型地有JUnit娜搂。

provided:對于編譯和測試有效,不會打包進發(fā)布包中百宇,典型的例子為servlet-api,一般的web工程運行時都使用容器的servlet-api。

runtime:只在運行測試用例和實際運行時有效携御,典型地是jdbc驅動jar包。

system: 不從maven倉庫獲取該jar,而是通過systemPath指定該jar的路徑啄刹。

import: 用于一個dependencyManagement對另一個dependencyManagement的繼承。

四誓军、Maven的生命周期

maven有三套生命周期,分別為:

1昵时、clean 周期:主要用于清理上一次構建產(chǎn)生的文件,可以理解為刪除target目錄

2债查、默認周期瓜挽,

主要階段包含:

process-resources 默認處理src/test/resources/下的文件盹廷,將其輸出到測試的classpath目錄中,

compile 編譯src/main/java下的java文件久橙,產(chǎn)生對應的class,

process-test-resources 默認處理src/test/resources/下的文件,將其輸出到測試的classpath目錄中,

test-compile 編譯src/test/java下的java文件淆衷,產(chǎn)生對應的class,

test 運行測試用例,

package 打包構件,即生成對應的jar, war等,

install將構件部署到本地倉庫,

deploy 部署構件到遠程倉庫

3祝拯、site周期

主要階段包含

site 產(chǎn)生項目的站點文檔

site-deploy 將項目的站點文檔部署到服務器

五、我們經(jīng)常使用“Mvn Clean Package”命令進行項目打包鹰贵,請問該命令執(zhí)行了哪些動作來完成該任務?

在這個命令中我們調(diào)用了maven的clean周期的clean階段綁定的插件任務碉输,以及default周期的package階段綁定的插件任務

默認執(zhí)行的任務有(maven的術語叫goal, 也有人翻譯成目標,我這里用任務啦):

maven-clean-plugin:clean->

maven-resources-plugin:resources->

maven-compile-plugin:compile->

mavne-resources-plugin:testResources->

maven-compile-plugin:testCompile->

maven-jar-plugin:jar

六敷钾、依賴的解析機制

解析發(fā)布版本:如果本地有肄梨,直接使用本地的阻荒,沒有就向遠程倉庫請求众羡。

解析快照版本:合并本地和遠程倉庫的元數(shù)據(jù)文件-groupId/artifactId/version/maven-metadata.xml,這個文件存的版本都是帶時間戳的,將最新的一個改名為不帶時間戳的格式供本次編譯使用辆毡。

解析版本為LATEST,RELEASE,過于復雜舶掖,且解析的結果不穩(wěn)定, 不推薦在項目中使用主慰,感興趣的同學自己去研究,簡而言之就是合并groupId/artifactId/maven-metadata.xml找到對應的最新版本和包含快照的最新版本共螺。

七、插件的解析機制

當我們輸入"mvn dependency:tree"這樣的指令藐不,解析的步驟為:

解析groupID:

maven使用默認的groupID:"org.apache.maven.plugins"或者"org.codehaus.mojo"

解析artifactId(maven的官方叫做插件前綴解析策略)

合并該groupId在所有倉庫中的元數(shù)據(jù)庫文件(maven-metadata-repository.xml)秦效,比如maven官方插件的元數(shù)據(jù)文件所在的目錄為org\apache\maven\plugins雏蛮,該文件下有如下的條目

Maven Dependency Plugin

dependency

maven-dependency-plugin

通過比較這樣的條目阱州,我們就將該命令的artifactId解析為maven-dependency-plugin

解析version

如果你在項目的pom中聲明了該插件的版本,那么直接使用該版本的插件苔货,否則合并所有倉庫中groupId/artifactId/maven-metadata-repository.xml,找到最新的發(fā)布版本夜惭。

對于非官方的插件,有如下兩個方法可以選擇:

1)使用groupId:artifactId:version:goal 來運行滥嘴,好長~~~~~~~~~~

2)在Settings.xml中添加pluginGroup項,這樣maven不能在官方的插件庫中解析到某個插件若皱,那么就可以去你配置的group下查找啦。

八走触、多模塊如何聚合

配置一個打包類型為pom的聚合模塊,然后在該pom中使用<module>元素聲明要聚合的模塊

九互广、對于一個多模塊項目卧土,如果管理項目依賴的版本

通過在父模塊中聲明dependencyManagement和pluginManagement像樊, 然后讓子模塊通過<parent>元素指定父模塊,這樣子模塊在定義依賴是就可以只定義groupId和artifactId生棍,自動使用父模塊的version,這樣統(tǒng)一整個項目的依賴的版本。

十涂滴、一個項目的依賴來源于不同的組織,可能這些依賴還會依賴別的Jar包柔纵,如何保證這些傳遞依賴不會引起版本沖突。

使用<dependency&gt的<exclusion>元素將會引起沖突的元素排除搁料。

十一、常見的Maven私服的倉庫類型加缘。

(宿主倉庫)hosted repository, (代理倉庫)proxy repository, (倉庫組)group repository

作者:江河洋海

鏈接:http://www.reibang.com/p/03db064707ac

來源:簡書

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末觉啊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杠人,更是在濱河造成了極大的恐慌,老刑警劉巖嗡善,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異各吨,居然都是意外死亡,警方通過查閱死者的電腦和手機揭蜒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門剔桨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屉更,“玉大人洒缀,你說我怎么就攤上這事欺冀。” “怎么了隐轩?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵渤早,是天一觀的道長龙助。 經(jīng)常有香客問我蛛芥,道長,這世上最難降的妖魔是什么仅淑? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮涯竟,結果婚禮上,老公的妹妹穿的比我還像新娘庐船。我一直安慰自己,他們只是感情好筐钟,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著篓冲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壹将。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天妇菱,我揣著相機與錄音,去河邊找鬼闯团。 笑死,一個胖子當著我的面吹牛偷俭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涌萤,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼负溪!你這毒婦竟也來了?” 一聲冷哼從身側響起川抡,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崖堤,沒想到半個月后重贺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸣戴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年昧廷,在試婚紗的時候發(fā)現(xiàn)自己被綠了偎箫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片木柬。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡淹办,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娇唯,到底是詐尸還是另有隱情,我是刑警寧澤塔插,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布拓哟,位于F島的核電站,受9級特大地震影響断序,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜违诗,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诸迟。 院中可真熱鬧愕乎,春花似錦、人聲如沸感论。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芳绩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間示括,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工垛膝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吼拥。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓线衫,卻偏偏與公主長得像凿可,于是被迫代替她去往敵國和親授账。 傳聞我的和親對象是個殘疾皇子枯跑,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容