maven---4構(gòu)件的坐標(biāo)

需求背景

maven的一大功能時(shí)管理項(xiàng)目依賴,為了自動(dòng)化解析任何一個(gè)java構(gòu)件,Maven就必須將它們唯一標(biāo)識(shí),這就是通過maven坐標(biāo)實(shí)現(xiàn)。

實(shí)現(xiàn)原理

maven定義了這樣一組規(guī)則:世界上任何一個(gè)構(gòu)件都可以使用maven坐標(biāo)唯一標(biāo)識(shí),坐標(biāo)元素包括:groupId、artifactId、version、packaging、classifier。只要提供正確的坐標(biāo)就能從倉庫中找到相應(yīng)的構(gòu)件供我們使用。maven從哪里下載構(gòu)件呢?答:maven內(nèi)置了一個(gè)中央倉庫的地址,該中央倉庫包含了世界上大部分流行的開源構(gòu)件。(當(dāng)然有一些構(gòu)件在倉庫中找不到,需要自己下載)

坐標(biāo)詳解

任何構(gòu)件都必須明確定義自己的坐標(biāo),而一組maven坐標(biāo)是通過一些元素定義的,他們是:groupId、artifactId、version、packaging、classifier。
先看一組坐標(biāo)定義如下:

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

這是nexus-indexer項(xiàng)目的坐標(biāo),nexus-indexer是一個(gè)對(duì)maven倉庫編纂索引并提供搜索功能的類庫,它是Nexus項(xiàng)目的一個(gè)子模塊。

  • goupId: 定義了當(dāng)前maven項(xiàng)目隸屬的實(shí)際項(xiàng)目,maven項(xiàng)目和實(shí)際項(xiàng)目不一定對(duì)應(yīng),比如SpringFramework這一實(shí)際項(xiàng)目,其對(duì)應(yīng)的maven項(xiàng)目會(huì)有很多,如spring-core、spring-context等。groupId不應(yīng)該對(duì)應(yīng)到項(xiàng)目所屬公司,因?yàn)楣鞠旅鏁?huì)有好多項(xiàng)目。

  • artifactId:該元素定義實(shí)際項(xiàng)目中的一個(gè)maven項(xiàng)目(模塊),推薦使用實(shí)際項(xiàng)目名稱作為artifactId前綴。如上例nexus-indexer使用nexus作為前綴,這樣做的好處是方便需找實(shí)際構(gòu)件,因?yàn)閙aven生成構(gòu)件名稱默認(rèn)是以artifactId作為開頭。

  • version:定義maven項(xiàng)目當(dāng)前所處版本。

  • packaging:定義maven項(xiàng)目的打包方式,首先打包方式通常與所生成構(gòu)件的文件擴(kuò)展名對(duì)應(yīng),如packaging為jar則構(gòu)件擴(kuò)展名為jar。packaging為war最終生成以.war結(jié)尾文件,但不是絕對(duì)。其次,打包方式會(huì)影響到構(gòu)建項(xiàng)目的生命周期,比如jar打包和war打包會(huì)使用不同的命令。默認(rèn)使用jar。

  • classifier:該元素用來幫助定義構(gòu)件輸出的一些附屬構(gòu)件。附屬構(gòu)件與主構(gòu)件對(duì)應(yīng),如上例的主構(gòu)件是nexus-indexer-2.0.0.jar,該項(xiàng)目可能還會(huì)通過使用一些插件生成如nexus-indexer-javadoc.jar、nexus-indexer-source.jar這樣一些附屬構(gòu)件,其包含了java文檔和源代碼。這時(shí)候,javadoc和sources就是這兩個(gè)附屬構(gòu)件的classifier。這樣,附屬構(gòu)件也就擁有了自己唯一的坐標(biāo)。還有一個(gè)關(guān)于classifier的典型例子是TestNG,TestNG的主構(gòu)件是基于java1.4平臺(tái)的,而它有提供了一個(gè)classifier為jdk1.5的附屬構(gòu)件。注意,不能直接定義項(xiàng)目的classifier,因?yàn)楦綄贅?gòu)件不是項(xiàng)目直接默認(rèn)生成的,而是由附加的插件幫助生成的。主構(gòu)件是項(xiàng)目在package階段是默認(rèn)生成,而附屬構(gòu)件需要插件來完成。

上述5元素groupId、artifactId、version是必須的,packaging可選,默認(rèn)jar,classifier不能直接定義。同時(shí),項(xiàng)目構(gòu)件的文件名是與坐標(biāo)對(duì)應(yīng)的,一般的規(guī)則為artificatId-version[-classifier].packaging。packing并非一定與構(gòu)件擴(kuò)展名對(duì)應(yīng),比如packing為maven-plugin的構(gòu)件擴(kuò)展名為jar。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • |-1-更新內(nèi)容[6.從倉庫解析依賴的機(jī)制(重要)] 1Maven倉庫作用 倉庫用來存儲(chǔ)所有項(xiàng)目使用到構(gòu)件,在ma...
    zlcook閱讀 6,453評(píng)論 0 25
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • 前言什么是 POMQuick Overview POM 常用元素 pom.xml 完整注釋 參考 0 前言 什么是...
    阿父閱讀 12,760評(píng)論 1 36
  • 本文主要講解maven入門基礎(chǔ)部分,關(guān)于更深層次的知識(shí)請(qǐng)閱讀我的另一篇文章:項(xiàng)目管理Maven篇(2)- Sona...
    君哥聊編程閱讀 2,860評(píng)論 1 3
  • 今天在票圈發(fā)了一段話:“這車監(jiān)控的顏色有一股迷之動(dòng)漫風(fēng),像是穿著小白裙的麻花辮少女待的地方?!边@其中點(diǎn)贊的,除了我...
    冋三金閱讀 319評(píng)論 0 0

友情鏈接更多精彩內(nèi)容