2.Maven坐標(biāo)和依賴(lài)

1.Maven坐標(biāo)

????Maven定義了一組規(guī)則脆栋,用于標(biāo)識(shí)構(gòu)件的唯一性倦卖。這些元素包括:groupId洒擦、artifactId、version糖耸、packaging秘遏、classifier。通過(guò)這些元素我們就可以找到對(duì)應(yīng)的構(gòu)件嘉竟。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.3.RELEASE</version>
    <packaging>jar</packaging>
    <scope>...</scope>
    <optional>...</optional>
    <exclusions>...</exclusions>
</dependency>
  • 1.groupId

定義當(dāng)前Maven項(xiàng)目隸屬于的實(shí)際項(xiàng)目邦危,通常定義為公司域名的倒寫(xiě)加實(shí)際項(xiàng)目簡(jiǎn)寫(xiě)。比如阿里巴巴(com.alibab.dubbo)

  • 2.artifactId

該元素定義實(shí)際項(xiàng)目中的一個(gè)Maven項(xiàng)目模塊舍扰,通常做法是使用實(shí)際項(xiàng)目名稱(chēng)作為artifactId的前綴倦蚪。比如(dubbo-client)

  • 3.version

該元素定義Maven項(xiàng)目當(dāng)前所處的版本。通常命名方式為:主版本號(hào).次版本號(hào).修訂號(hào)边苹。(主版本號(hào):產(chǎn)品方向改變陵且,或者大規(guī)模API不兼容。次版本號(hào):保持相對(duì)兼容个束,增加主要功能特性慕购。修訂號(hào):保持完全兼容性,修復(fù)BUG茬底、新增次要功能)起始版本為1.0.0

  • 4.packaging

該元素定義Maven的打包方式沪悲。jar生成jar包,war生成war包阱表,pom就是作為父子工程的父工程殿如,僅僅引用pom。

  • 5.scope

依賴(lài)范圍

  • 6.optional

標(biāo)記依賴(lài)是否可選

  • 7.exclusions

用來(lái)排除傳遞依賴(lài)

2.依賴(lài)范圍

????依賴(lài)范圍是用來(lái)控制引入的jar與classpath的關(guān)系最爬。(編譯時(shí)的classpath涉馁、測(cè)試的classpath、運(yùn)行classpath)

  • 1.compile

編譯依賴(lài)范圍爱致。如果沒(méi)有指定scope類(lèi)型烤送,默認(rèn)為compile。此依賴(lài)范圍的Maven范圍對(duì)編譯糠悯、測(cè)試胯努、運(yùn)行三種classpath都有效

  • 2.test

測(cè)試依賴(lài)范圍。此依賴(lài)范圍的Maven依賴(lài)逢防,只對(duì)測(cè)試classpath有效叶沛。在編譯主代碼或者運(yùn)行項(xiàng)目使用時(shí)無(wú)法使用此類(lèi)Maven依賴(lài)。

  • 3.provided

已提供依賴(lài)忘朝。使用此依賴(lài)范圍的Maven依賴(lài)灰署,對(duì)于編譯和測(cè)試classpath都有效。但是在運(yùn)行時(shí)無(wú)效。eg:servlet-api溉箕。

因?yàn)橥ǔava web程序都是運(yùn)行在容器里面了晦墙,比如tomcat,而tomcat已經(jīng)提供了此依賴(lài)肴茄,故無(wú)須再引入晌畅。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

  • 4.runtime

運(yùn)行時(shí)依賴(lài)范圍。使用此依賴(lài)范圍的Maven依賴(lài)寡痰,對(duì)于測(cè)試和運(yùn)行classpath有效抗楔,但是在編譯主代碼無(wú)效。比如JDBC驅(qū)動(dòng)實(shí)現(xiàn)拦坠。因?yàn)橹鞔a編譯的只需要JDK提供的JDBC接口连躏。只有在執(zhí)行和測(cè)試需要具體的實(shí)現(xiàn)類(lèi)

3.傳遞性依賴(lài)

????比如我們?cè)谝肧pring框架jar包的時(shí)候,在引入Spring Context jar包的時(shí)候贞滨,就無(wú)須引入spring-aop入热,或者spring-beans等等。因?yàn)镸aven將這種傳遞依賴(lài)已經(jīng)默認(rèn)給我們加載好了晓铆。

4.排除依賴(lài)

????傳遞性依賴(lài)會(huì)給項(xiàng)目隱式地引入很多依賴(lài)勺良,這極大地簡(jiǎn)化了項(xiàng)目依賴(lài)的管理。但是有有時(shí)候也會(huì)帶來(lái)問(wèn)題骄噪。比如:當(dāng)前項(xiàng)目有依賴(lài)了第三方依賴(lài)郑气,但是第三方依賴(lài)了另一個(gè)不穩(wěn)定的版本。這樣不穩(wěn)定性就會(huì)傳遞給本項(xiàng)目腰池。這時(shí)候就需要排除不穩(wěn)定的版本依賴(lài)。

<dependency>
    <groupId>com.icegreen</groupId>
    <artifactId>greenmail</artifactId>
    <version>1.5.6</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
        </exclusion>
    </exclusions>
</dependency>

5.歸類(lèi)依賴(lài)

????如果項(xiàng)目依賴(lài)同一個(gè)項(xiàng)目的不同的模塊忙芒,依賴(lài)的版本的都相同示弓,則為了便于管理,使用properties元素定義Maven屬性呵萨,比如spring項(xiàng)目奏属。

<properties>
        <spring.version>4.3.14.RELEASE</spring.version>
</properties>

????定義了上述的屬性,則在Maven運(yùn)行的時(shí)候會(huì)將POM文件所有的${spring.version}替換掉潮峦。

6.優(yōu)化依賴(lài)

????在軟件開(kāi)發(fā)過(guò)程中囱皿,會(huì)不斷優(yōu)化自己的代碼。比如對(duì)Maven依賴(lài)忱嘹,要及時(shí)去除多余的依賴(lài)嘱腥。

查看當(dāng)前項(xiàng)目的已解析的依賴(lài)

mvn dependency:list

以tree的形式展示已解析的依賴(lài)

mvn dependency:tree

查看未聲明的依賴(lài)于聲明但未使用的依賴(lài)

mvn dependency:analyze
[WARNING] Used undeclared dependencies found:
[WARNING]    org.springframework:spring-context:jar:4.3.14.RELEASE:compile
[WARNING]    org.springframework:spring-beans:jar:4.3.14.RELEASE:compile
[WARNING] Unused declared dependencies found:
[WARNING]    com.icegreen:greenmail:jar:1.5.6:test

????上面就是指項(xiàng)目中使用到的,但是沒(méi)有顯式申明的依賴(lài)拘悦,這里使用了未申明的spring-context齿兔。==這種依賴(lài)意味著潛在的風(fēng)險(xiǎn)。== 因?yàn)樯?jí)依賴(lài)的時(shí)候,相關(guān)傳遞性依賴(lài)的版本發(fā)生了變化分苇,但是不易察覺(jué)添诉。==容易導(dǎo)致項(xiàng)目出現(xiàn)錯(cuò)誤。==

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末医寿,一起剝皮案震驚了整個(gè)濱河市栏赴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靖秩,老刑警劉巖须眷,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盆偿,居然都是意外死亡柒爸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)事扭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捎稚,“玉大人,你說(shuō)我怎么就攤上這事求橄〗褚埃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵罐农,是天一觀的道長(zhǎng)条霜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)涵亏,這世上最難降的妖魔是什么宰睡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮气筋,結(jié)果婚禮上拆内,老公的妹妹穿的比我還像新娘。我一直安慰自己宠默,他們只是感情好麸恍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著搀矫,像睡著了一般抹沪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓤球,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天融欧,我揣著相機(jī)與錄音,去河邊找鬼卦羡。 笑死蹬癌,一個(gè)胖子當(dāng)著我的面吹牛权她,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逝薪,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼隅要,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了董济?” 一聲冷哼從身側(cè)響起步清,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虏肾,沒(méi)想到半個(gè)月后廓啊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡封豪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年谴轮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吹埠。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡第步,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缘琅,到底是詐尸還是另有隱情粘都,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布刷袍,位于F島的核電站翩隧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呻纹。R本人自食惡果不足惜堆生,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雷酪。 院中可真熱鬧淑仆,春花似錦、人聲如沸太闺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)省骂。三九已至,卻和暖如春最住,著一層夾襖步出監(jiān)牢的瞬間钞澳,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工涨缚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轧粟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像兰吟,于是被迫代替她去往敵國(guó)和親通惫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理混蔼,服務(wù)發(fā)現(xiàn)履腋,斷路器,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,827評(píng)論 6 342
  • spring官方文檔:http://docs.spring.io/spring/docs/current/spri...
    牛馬風(fēng)情閱讀 1,684評(píng)論 0 3
  • 文章作者:Tyan博客:noahsnail.com 2.Introduction to the Spring Fr...
    SnailTyan閱讀 5,392評(píng)論 7 56
  • 半個(gè)月之前入了手繪的坑惭嚣,跟著簡(jiǎn)書(shū)上的作家一起畫(huà)畫(huà)遵湖,效果真的特明顯,對(duì)于我來(lái)說(shuō)晚吞,這是最好的靜心方式延旧,現(xiàn)在我已經(jīng)可以獨(dú)...
    枕草子吧閱讀 180評(píng)論 0 0