坐標(biāo)涉枫,依賴,倉庫

何為Maven坐標(biāo)

是Maven定義的一組規(guī)則腐螟,世界上任何一個(gè)構(gòu)建都可以使用Maven坐標(biāo)唯一標(biāo)識(shí)愿汰,Maven坐標(biāo)的元素包括groupId,artifactId乐纸,version衬廷,packging,classifier汽绢。只需要提供正確的坐標(biāo)信息吗跋,Maven就能找到對(duì)應(yīng)的構(gòu)建。

坐標(biāo)詳解

坐標(biāo)定義例子:

<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>

groupId:定義當(dāng)前Maven項(xiàng)目隸屬于的實(shí)際項(xiàng)目
artifactId:該元素定義實(shí)際項(xiàng)目中的一個(gè)Maven項(xiàng)目(模塊)宁昭,推薦的做法是使用實(shí)際項(xiàng)目名稱作為artifactId的前綴
version:該元素定義Maven項(xiàng)目當(dāng)前所處的版本
packaging:該元素定義Maven項(xiàng)目的打包方式
classifier:該元素用來幫助定義構(gòu)建輸出的一些附屬構(gòu)建

依賴詳解

  1. type:依賴的類型跌宛,對(duì)應(yīng)于項(xiàng)目坐標(biāo)定義的packaging。大部分情況下久窟,該元素不必聲明秩冈,默認(rèn)值為jar
  2. 依賴范圍:依賴范圍就是用來控制依賴與這三種classpath(編譯classpath,測試classpath斥扛,運(yùn)行classpath)的關(guān)系入问,Maven有以下幾種依賴范圍:
    2.1 compile:編譯測試范圍丹锹。如果沒有指定,就會(huì)默認(rèn)使用該依賴范圍芬失。使用此依賴的Maven依賴楣黍,對(duì)于編譯,測試棱烂,運(yùn)行三種classpath都有效
    2.2 test:測試依賴范圍租漂,此依賴只對(duì)測試classpath有效
    2.3 provided:已提供依賴范圍,此依賴范圍對(duì)編譯和測試classpath有效
    2.4 runtime:運(yùn)行時(shí)依賴范圍颊糜,此依賴對(duì)于測試和運(yùn)行有效
    2.5 system:系統(tǒng)依賴范圍哩治,依賴范圍和provided完全一致,但是使用此依賴時(shí)必須通過systemPath元素顯示的指定依賴文件的路徑衬鱼,代碼示例如下:
<dependency>
  <groupId>java.sql</groupId>
  <artifactId>jdbc-stdext</artifactId>
  <version>2.0</version>
  <scope>system</scope>
  <systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
  1. 傳遞性依賴和依賴范圍
    第一直接依賴的范圍和第二直接依賴的范圍決定了傳遞性依賴的范圍业筏。如下表所示,最左邊一列表示第一直接依賴范圍鸟赫,最上面一行表示第二直接依賴范圍蒜胖,中間的交叉單元格則表示傳遞性依賴范圍:
compile test provided runtime
compile compile -- -- runtime
test test -- -- test
provided provided -- provided provided
runtime runtime -- -- runtime

為了幫助理解,舉個(gè)例子:account-email項(xiàng)目有一個(gè)com.icegreen:greenmail:1.3.1b的直接依賴我們說這是第一直接依賴抛蚤,其依賴范圍是test台谢;而greenmail又有一個(gè)javax.mail:mail:1.4的直接依賴,我們說這是第二直接依賴岁经,其依賴范圍為compile朋沮。顯然,javax.mail:mail:1.4是account-email的傳遞性依賴蒿偎,對(duì)照表可以知道朽们,當(dāng)?shù)谝恢苯右蕾嚪秶鸀閠est,第二直接依賴范圍是compile的時(shí)候诉位,傳遞性依賴范圍是test,因此菜枷,javax.mail:mail:1.4是account-email的一個(gè)范圍是test的傳遞性依賴

依賴操作

  1. 依賴調(diào)解苍糠,當(dāng)傳遞性依賴造成問題的時(shí)候,我們就需要清楚的知道該傳遞性依賴時(shí)從那條依賴路徑引入的
    Maven調(diào)解的兩大原則:
    1.1 路徑最近者優(yōu)先
    1.2 第一聲明者優(yōu)先啤誊,順序最靠前的那個(gè)依賴優(yōu)勝

  2. 可選依賴使用<optional>元素表示依賴為可選依賴岳瞭,當(dāng)依賴為可選依賴時(shí),該依賴只對(duì)本項(xiàng)目產(chǎn)生影響蚊锹,如若別的項(xiàng)目依賴本項(xiàng)目瞳筏,不會(huì)依賴本項(xiàng)目的可選依賴。使用可選依賴的原因是某一個(gè)項(xiàng)目實(shí)現(xiàn)了多個(gè)特性牡昆,在面向?qū)ο笤O(shè)計(jì)中姚炕,有個(gè)單一職責(zé)型原則,意指一個(gè)類應(yīng)該只有一項(xiàng)職責(zé),而不是糅合太多的功能

  3. 排除依賴
    假想情況:當(dāng)前項(xiàng)目有一個(gè)第三方依賴柱宦,而這個(gè)第三方依賴由于某些原因依賴了另外一個(gè)類庫的SNAPSHOP版本些椒,那么這個(gè)SNAPSHOP就會(huì)成為當(dāng)前項(xiàng)目的傳遞性依賴,而SNAPSHOP的不穩(wěn)定性會(huì)直接影響到當(dāng)前項(xiàng)目掸刊,這時(shí)候就需要排除掉該SNAPSHOP免糕,并且在當(dāng)前項(xiàng)目中聲明該類庫的某個(gè)正式的發(fā)布版本
    解決方法:代碼中使用exclusions元素聲明排除依賴,exclusions可以包含一個(gè)或者多個(gè)exclusions子元素忧侧,因此可次排除一個(gè)或者多個(gè)傳遞性依賴
    代碼示例如下:

 <dependency>
  <groupId>com.juvenxu.mvnbook</groupId>
  <artifactId>project-b</artifactId>
  <version>1.0.0</version>
  <exclusions>
    <exclusion>
      <groupId>com.juvenxu.mvnbook</groupId>
      <artifactId>project-c</artifactId>
    </exclusion>
  </exclusions>
</dependency>
  1. 優(yōu)化依賴
    4.1 mvn dependency:list石窑,查看當(dāng)前項(xiàng)目的已解析依賴
    4.2 mvn dependency:tree,查看當(dāng)前項(xiàng)目的依賴樹
    使用上面兩個(gè)命令可以幫助我們詳細(xì)了解項(xiàng)目中所有依賴的具體信息蚓炬,在此基礎(chǔ)上尼斧,還有dependency:analyze工具可以幫助分析當(dāng)前項(xiàng)目的依賴
    注:最好是顯示的聲明任何項(xiàng)目中直接用到的依賴

倉庫的分類

  1. 本地倉庫
    不管Linux還是Windows上,每個(gè)用戶在自己的目錄下都有一個(gè)路徑名為.m2/respository/的倉庫目錄试吁。以.開頭的文件或目錄默認(rèn)是隱藏的棺棵,可以使用ls-a命令顯示隱藏文件或目錄
    有時(shí)候,用戶會(huì)想要自定義本地倉庫目錄地址熄捍,可以編輯文件~/.m2/settings.xml烛恤,設(shè)置localRepository元素的值為想要的倉庫地址
    Install插件的install目標(biāo)將項(xiàng)目的構(gòu)建輸出文件安裝到本地倉庫

  2. 私服
    私服是一種特殊的遠(yuǎn)程倉庫,為了節(jié)省寬帶和時(shí)間余耽,應(yīng)該在局域網(wǎng)內(nèi)架設(shè)一個(gè)私有的倉庫服務(wù)器缚柏,用其代理所有外部的遠(yuǎn)程倉庫。內(nèi)部的項(xiàng)目還能部署到私服上供其它項(xiàng)目使用碟贾,一些無法外部倉庫下載到的構(gòu)件也能從本地上傳到私服上供大家使用币喧。
    私服主要的作用有: 節(jié)省自己的外網(wǎng)寬帶,加速M(fèi)aven構(gòu)建袱耽,部署第三方構(gòu)建杀餐,提高穩(wěn)定性,增強(qiáng)控制朱巨,降低中央倉庫的負(fù)荷

遠(yuǎn)程倉庫的配置

  1. 在respository元素下史翘,可以使用respository子元素聲明一個(gè)或者多個(gè)遠(yuǎn)程倉庫
  2. 對(duì)于releases和snapshots來說,除了enabled冀续,塔門還包含另外兩個(gè)子元素uodatePolicy和checksumPolicy
    2.1 updatePolicy:配置Maven從遠(yuǎn)程倉庫檢查更新的頻率
    2.2 checksumPolicy:配置Maven檢查檢驗(yàn)和文件的策略
    2.3 代碼示例:
<snapshots>
 <enabled>true</enabled>
 <updatePolicy>daily</updatePolicy>
 <checksumPolicy>ignore</checksumPolicy>
</snapshots>
  1. 遠(yuǎn)程倉庫的認(rèn)證需要在settings.xml中配置用戶名和密碼
<servers>
  <server>
    <id>my-proj</id>
    <username>repo-user</username>
    <password>repo-pwd</password>
  </server>
</servers>
  1. 部署至遠(yuǎn)程倉庫琼讽,distributionManagement包含repository和snapshotRepository子元素,前者表示發(fā)布版本構(gòu)建的倉庫洪唐,后者表示快照版本的倉庫钻蹬。id為該遠(yuǎn)程倉庫的唯一標(biāo)識(shí),name是為了方便人閱讀凭需,關(guān)鍵的url表示該倉庫的地址问欠,部署到配置的遠(yuǎn)程倉庫命令是mvn clean deploy
<distributionManagement>
  <repository>
    <id></id>
    <name></name>
    <url></url>
  </repository>
  <snapshotRepository>
    <id></id>
    <name></name>
    <url></url>
  </snapshotRepository>
</distributionManagement>

文章僅供參考肝匆,代碼并不是全正確,只需要知道在對(duì)應(yīng)的情況溅潜,可以做對(duì)應(yīng)的處理术唬,代碼是變化的,我相信原理不變


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滚澜,一起剝皮案震驚了整個(gè)濱河市粗仓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌设捐,老刑警劉巖借浊,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異萝招,居然都是意外死亡蚂斤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門槐沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曙蒸,“玉大人,你說我怎么就攤上這事岗钩∨撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵兼吓,是天一觀的道長臂港。 經(jīng)常有香客問我,道長视搏,這世上最難降的妖魔是什么审孽? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮浑娜,結(jié)果婚禮上佑力,老公的妹妹穿的比我還像新娘。我一直安慰自己棚愤,他們只是感情好搓萧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宛畦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揍移。 梳的紋絲不亂的頭發(fā)上次和,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音那伐,去河邊找鬼踏施。 笑死石蔗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的畅形。 我是一名探鬼主播养距,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼日熬!你這毒婦竟也來了棍厌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤竖席,失蹤者是張志新(化名)和其女友劉穎耘纱,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毕荐,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡束析,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憎亚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片员寇。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖第美,靈堂內(nèi)的尸體忽然破棺而出蝶锋,到底是詐尸還是另有隱情,我是刑警寧澤斋日,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布牲览,位于F島的核電站,受9級(jí)特大地震影響恶守,放射性物質(zhì)發(fā)生泄漏第献。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一兔港、第九天 我趴在偏房一處隱蔽的房頂上張望庸毫。 院中可真熱鬧,春花似錦衫樊、人聲如沸飒赃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽载佳。三九已至,卻和暖如春臀栈,著一層夾襖步出監(jiān)牢的瞬間蔫慧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工权薯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姑躲,地道東北人睡扬。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像黍析,于是被迫代替她去往敵國和親卖怜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • |-1-更新內(nèi)容[6.從倉庫解析依賴的機(jī)制(重要)] 1Maven倉庫作用 倉庫用來存儲(chǔ)所有項(xiàng)目使用到構(gòu)件阐枣,在ma...
    zlcook閱讀 6,059評(píng)論 0 25
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評(píng)論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理马靠,服務(wù)發(fā)現(xiàn),斷路器侮繁,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1.POM文件 modelVersion:POM 模型的版本 groupId:項(xiàng)目屬于哪...
    mecury閱讀 990評(píng)論 0 0
  • 什么才叫好的教育產(chǎn)品虑粥?什么樣的教學(xué)產(chǎn)品能夠讓師生印象深刻,讓教育從業(yè)者都充滿期待宪哩?什么產(chǎn)品可以受到教育局的關(guān)注和認(rèn)...
    meshow閱讀 695評(píng)論 0 0