Maven依賴管理

Maven在編譯绳姨,測試和運(yùn)行時(shí)使用的是不同的ClassPath, 所以Maven通過dependency的scope來定義不同的classpath應(yīng)該包含哪些依賴污桦。

定義依賴


  1. compile: 編譯依賴范圍。如果沒有指定,聚會(huì)默認(rèn)使用該依賴范圍蚕愤,使用此依賴范圍的Maven依賴,對(duì)于編譯饺蚊、測試和運(yùn)行三種classpath都有效萍诱。在編譯、測試和運(yùn)行的時(shí)候都要使用該依賴
  2. test:測試依賴范圍污呼。 是用此依賴范圍的Maven依賴裕坊,只對(duì)于測試classpath有效,在編譯主代碼或者運(yùn)行項(xiàng)目時(shí)將無法使用此依賴燕酷。
  3. provided: 已提供依賴范圍籍凝,對(duì)于編譯和測試classpath有效,但是在運(yùn)行時(shí)無效苗缩。編譯和測試項(xiàng)目的時(shí)候需要該依賴饵蒂,但是在運(yùn)行該項(xiàng)目的時(shí)候,由系統(tǒng)提供酱讶,所以不需要maven重復(fù)引入退盯。
  4. runtime: 運(yùn)行時(shí)依賴范圍,對(duì)于runtime和測試classpath有效泻肯,但是在編譯代碼時(shí)無效渊迁,典型的就是JDBC的驅(qū)動(dòng)實(shí)現(xiàn),項(xiàng)目在編譯時(shí)候只需要使用JDK提供的JDBC接口灶挟,只有在執(zhí)行測試或者運(yùn)行的時(shí)候才需要JDBC具體的驅(qū)動(dòng)實(shí)現(xiàn)琉朽。
    5: system: 系統(tǒng)依賴范圍,該依賴與provided的依賴范圍是一只的膏萧,但是漓骚,使用system依賴范圍必須通過systemPath元素顯式的指定依賴文件的路徑蝌衔。此依賴不是通過maven倉庫解析,而是與本機(jī)綁定的蝌蹂,可能會(huì)造成不可移植的問題噩斟。
    6: import: 導(dǎo)入依賴范圍,該依賴不會(huì)對(duì)三種classpath有任何實(shí)際的影響孤个。 一般用在dependency management中剃允,設(shè)定依賴的默認(rèn)版本。

依賴傳遞


在maven中齐鲤,依賴是具有傳遞性的斥废,例如項(xiàng)目依賴Spring-core, spring-core又依賴common-log,name項(xiàng)目就依賴common-log给郊。這些間接依賴的范圍又是如何定義呢牡肉?
這個(gè)我們需要分組進(jìn)行分析。

  1. 間接依賴為compile時(shí)淆九,則依賴關(guān)系與直接依賴相同
  2. 間接依賴為test時(shí)统锤,則無論直接依賴是什么都沒有依賴關(guān)系
  3. 間接依賴為provided時(shí), 直接依賴為provided時(shí)炭庙,依賴關(guān)系為provided饲窿; 直接依賴為其他時(shí),則沒有依賴依賴
  4. 間接依賴為runtime時(shí)焕蹄, 直接依賴為compile時(shí)逾雄,依賴關(guān)系為runtime
    直接依賴關(guān)系為test時(shí), 依賴關(guān)系為test
    直接依賴關(guān)系為provided時(shí)腻脏, 依賴關(guān)系為provided
    直接依賴關(guān)系為runtime時(shí)鸦泳,依賴關(guān)系為runtime

依賴調(diào)解


在大多數(shù)情況下我們只需要關(guān)心項(xiàng)目的第一級(jí)依賴,可是有時(shí)候間接依賴可能會(huì)導(dǎo)致意想不到的沖突迹卢,這時(shí)候我們就需要對(duì)maven的選取機(jī)制有一定的了解辽故。maven選取機(jī)制有兩大原則。

  1. 路徑最短原則: 傳遞依賴的層級(jí)越少腐碱,則優(yōu)先選用誊垢。
    項(xiàng)目A ->D->E->C(2.0)
    項(xiàng)目A -> B ->C(1.0)
    則項(xiàng)目A依賴C(1.0),因?yàn)镃(1.0)的路徑為2症见。
  2. 第一聲明者優(yōu)先原則: 當(dāng)依賴層級(jí)相同時(shí)喂走,則查看依賴的順序,順序優(yōu)先者優(yōu)先選用谋作。
    項(xiàng)目A ->D->C(2.0)
    項(xiàng)目A -> B ->C(1.0)
    則項(xiàng)目A依賴C(2.0)芋肠,因?yàn)镃(2.0)與C(1.0)的路徑都為2,可是C(2.0)在C(1.0)之前被依賴遵蚜。

可選依賴


當(dāng)依賴屬性optional為true則為可選依賴帖池,當(dāng)依賴為可選依賴時(shí)奈惑,依賴不具有傳遞性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睡汹,一起剝皮案震驚了整個(gè)濱河市肴甸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌囚巴,老刑警劉巖原在,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異彤叉,居然都是意外死亡庶柿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門秽浇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浮庐,“玉大人,你說我怎么就攤上這事兼呵⊥酶ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵击喂,是天一觀的道長。 經(jīng)常有香客問我碰辅,道長懂昂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任没宾,我火速辦了婚禮凌彬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘循衰。我一直安慰自己铲敛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布会钝。 她就那樣靜靜地躺著伐蒋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迁酸。 梳的紋絲不亂的頭發(fā)上先鱼,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音奸鬓,去河邊找鬼焙畔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛串远,可吹牛的內(nèi)容都是我干的宏多。 我是一名探鬼主播儿惫,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼伸但!你這毒婦竟也來了姥闪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤砌烁,失蹤者是張志新(化名)和其女友劉穎筐喳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體函喉,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡避归,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了管呵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梳毙。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捐下,靈堂內(nèi)的尸體忽然破棺而出账锹,到底是詐尸還是另有隱情,我是刑警寧澤坷襟,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布奸柬,位于F島的核電站,受9級(jí)特大地震影響婴程,放射性物質(zhì)發(fā)生泄漏廓奕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一档叔、第九天 我趴在偏房一處隱蔽的房頂上張望桌粉。 院中可真熱鬧,春花似錦衙四、人聲如沸铃肯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽押逼。三九已至,卻和暖如春卡睦,著一層夾襖步出監(jiān)牢的瞬間宴胧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國打工表锻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恕齐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓瞬逊,卻偏偏與公主長得像显歧,于是被迫代替她去往敵國和親仪或。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • Maven依賴管理簡介 如果我們想要?jiǎng)?chuàng)建一個(gè)Java項(xiàng)目士骤,我們首先需要知道我們這個(gè)項(xiàng)目需要確定哪些依賴包范删。例如,如...
    Yuzuki_N閱讀 103評(píng)論 0 0
  • 管理包依賴是 Maven 核心功能之一拷肌,下面通過如何引入 jar 包到旦;如何解析 jar 包依賴;包沖突是如何產(chǎn)生巨缘;...
    data4閱讀 11,874評(píng)論 3 16
  • maven項(xiàng)目中需要使用到其它依賴時(shí)添忘,則需要在pom.xml中配置<dependency>元素也就是依賴聲明,這樣...
    zlcook閱讀 1,811評(píng)論 1 3
  • 依賴范圍 Maven 在編譯項(xiàng)目主代碼的時(shí)候需要使用一套 classpath若锁。其次搁骑,在編譯和執(zhí)行測試的時(shí)候會(huì)使用另...
    杰哥長得帥閱讀 300評(píng)論 0 0
  • 參考 http://www.reibang.com/p/ac50ba6ba3a2 http://www....
    MrWang915閱讀 294評(píng)論 0 0