maven 依賴傳遞和版本沖突

大家好,我是IT修真院北京分院第22期的學(xué)員童志榮,一枚正直純潔善良的java程序員。


maven依賴傳遞和版本沖突的解決_騰訊視頻

PPT戳這里

一宦言、背景介紹

如果 Maven 的依賴構(gòu)建必須每一個項目都指定,那配置是累死人了商模,比如A依賴了20個項目奠旺,B依賴A,那么還要添加20個項目,那就悲劇了阻桅,所以 maven有依賴傳遞的功能凉倚。

二、知識剖析

Maven采用“最近獲勝策略(nearest wins strategy)”的方式處理依賴沖突嫂沉。

換句話說稽寒,如果一個項目依賴于相同artifact的多個版本,在依賴樹中離項目最近的那個版本將被使用趟章。

三杏糙、常見問題

現(xiàn)在有一個web應(yīng)用resolve-web。

4個jar包:project-A蚓土,project-B宏侍,project-C,project-Common

resolve-web 依賴于project-A和project-B蜀漆,

project-A依賴于project-common的1.0版本谅河,調(diào)用了其中的sayHello()方法。

project-B依賴于project-C确丢,而project-C又進一步依賴于project-common的2.0版本绷耍,并調(diào)用其中的sayGoodBye()方法。

project-common的1.0和2.0版本唯一區(qū)別在于鲜侥,1.0中包含sayHello()方法褂始,而2.0中包含了sayHello()和sayGoodBye()兩個方法。

根據(jù)Maven的依賴傳遞機制描函,resolve-web將同時依賴于project-common的1.0和2.0版本崎苗,這就造成了依賴沖突狐粱。

而根據(jù)最近獲勝策略,Maven將選擇project-common的1.0版本作為最終的依賴胆数。

對于Maven 來說肌蜻,由于proejct-common的1.0版本比2.0版本在依賴樹中離resolve-web更近,故1.0版本獲勝幅慌。

在resolve-web中執(zhí)行"mvn dependency:tree -Dverbose"可以看到resolve-web的依賴關(guān)系:

可以看到宋欺,project-common:project-commmon:jar:2.0被忽略掉了。

此時在resolve-web的war包中將只包含project-common的1.0版本胰伍。

所以現(xiàn)在就產(chǎn)生問題了齿诞。由于project-common的1.0版本中不包含sayGoodBye()方法,而該方法正是project-C所需要的骂租,所以運行時將出現(xiàn)“NoSuchMethodError”祷杈。

四、解決方案

方法1:顯式加入對project-common 2.0版本的依賴渗饮。

先前的2.0版本不是離resolve-web遠了點嗎但汞,那我們就直接將它作為resolve-web的依賴,這不就比1.0版本離resolve-web還近嗎互站?

在resove-web的pom.xml文件中直接加上對project-common 2.0 的依賴:

方法2:resolve-web對project-A的dependency聲明中私蕾,將project-common排除掉。在resolve-web的pom.xml文件中修改對project-A的dependency聲明:

五胡桃、編碼實戰(zhàn)

六踩叭、擴展思考

七、參考文獻

http://www.cnblogs.com/davenkin/p/advanced-maven-resolve-dependencies-conflicts.html

八翠胰、更多討論

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末容贝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子之景,更是在濱河造成了極大的恐慌斤富,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锻狗,死亡現(xiàn)場離奇詭異满力,居然都是意外死亡,警方通過查閱死者的電腦和手機轻纪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門脚囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人桐磁,你說我怎么就攤上這事〗菜辏” “怎么了我擂?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵衬以,是天一觀的道長。 經(jīng)常有香客問我校摩,道長看峻,這世上最難降的妖魔是什么衙吩? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任互妓,我火速辦了婚禮,結(jié)果婚禮上坤塞,老公的妹妹穿的比我還像新娘冯勉。我一直安慰自己,他們只是感情好摹芙,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布灼狰。 她就那樣靜靜地躺著,像睡著了一般浮禾。 火紅的嫁衣襯著肌膚如雪交胚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天盈电,我揣著相機與錄音蝴簇,去河邊找鬼。 笑死匆帚,一個胖子當(dāng)著我的面吹牛熬词,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卷扮,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼荡澎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晤锹?” 一聲冷哼從身側(cè)響起摩幔,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鞭铆,沒想到半個月后或衡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡车遂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年封断,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舶担。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡坡疼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衣陶,到底是詐尸還是另有隱情柄瑰,我是刑警寧澤闸氮,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站教沾,受9級特大地震影響蒲跨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜授翻,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一或悲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧堪唐,春花似錦巡语、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兜材,卻和暖如春理澎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曙寡。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工糠爬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人举庶。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓执隧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親户侥。 傳聞我的和親對象是個殘疾皇子镀琉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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