Maven座標,瞭解下!

前言

看完上一篇《Maven基礎教程之使用入門》後,大家基本上就會使用Maven了,但是Maven遠不止上一篇文章中總結的那麼一點東西,還有很多其他非常重要的概念,而這些概念就是我們深入理解Maven,學習Maven原理的重點,從這一篇文章開始,我將開始重點總結Maven中的一些重點概念和原理性的東西,通過這些重要的概念和原理性的東西,讓大家知其然,也知其所以然。

Maven座標是什麼?

在初中的數學幾何中,我們知道,平面中任何一個座標都可以唯一標識該平面中的一個點。對於Maven世界中,有數量巨大的JAR包或者WAR包,在還沒有座標這個概念前,我們是如何引入我們項目需要的依賴呢?比如我現在創建了一個Spring的項目,此時我就要去Spring官網下載Spring相關的JAR包,放到我的項目Classpath下面去;當需要Mybatis相關的JAR包時,我再去Mybatis的官網下載對應的JAR包,再放到Classpath中去。也就是說,我們缺少什麼JAR包,就去網上下載對應的JAR包,而很多時候,我們只有在編譯出現錯誤時,我們才知道我們到底缺了哪些依賴的JAR包,所以這樣的工作就讓我們很被動,同時又沒法進行流程自動化。

問題拋出來了,我們要相信這個世界上大牛的能力,沒有解決不了的問題。基於這些難題,Maven就定義了這樣一組規則來搞定它。

世界上任何一個JAR包或者WAR包都可以使用Maven座標唯一標識,Maven座標的元素包括groupId、artifactId、version和classifier等。只要我們提供了正確的座標元素,Maven就能找到對應的JAR包或者WAR包。

就是這麼簡單的。所以,在我們開發自己的項目時,Maven也強制要求我們需要爲項目指定適當的座標,這樣其它的Maven項目才能引用對應項目生成的JAR包或者WAR包。

細說Maven座標

Maven座標就是定義了一種規則,任何基於Maven開發的項目都需要遵守這個規則,也就是需要明確定義自己的座標,我們可以看一下上一篇文章中pom.xml文件裏的那個示例:

<groupId>com.jellythink.HelloWorld</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

上面代碼中,關於座標的各個座標元素,這裏重點說明一下:

  • groupId:定義當前Maven項目隸屬的實際項目;我們要明白的是Maven項目和實際項目不一定是一對一的關係。舉一個最常見的例子,比如Spring Framework這個實際項目,其對應的Maven項目會有很多,如spring-core、spring-context等。這是由於Maven中模塊的概念,因此實際項目往往會被劃分成很多模塊。當我們看到一個項目的groupId時,會覺的很熟悉,爲什麼?是不是和我們經常定義的Java包名很像,這個和我們在Java中定義頂級包名的規則是一樣的,通常與公司或者組織的域名反向一一對應。

  • artifactId:該元素定義實際項目中的一個Maven項目(模塊),一般推薦的做法是使用實際項目名稱作爲artifactId的前綴,比如spring-core的前綴是spring一樣。

  • version:該元素定義Maven項目當前所處的版本;在Maven中定義了一整套完整的版本定義規範,後續會有專門的文章進行總結。

  • packaging:該元素定義Maven項目的打包方式;打包方式通常與所編譯生成的文件擴展名對應,但也不是絕對的,比如packaging爲maven-plugin的構件擴展名爲jar;packaging常見的是jar和war這兩種類型;不同的打包方式會影響到構建的生命週期。很多時候,我們也會看到我們沒有定義這個packaging元素,此時Maven會使用默認值jar。

  • classifier:該元素用來幫助定義輸出一些附屬文件。附屬輸出文件與主輸出文件是對應的,比如上面的主輸出文件是hello-world-1.0-SNAPSHOT.jar,該項目可能還會通過使用一些插件生成如hello-world-1.0-SNAPSHOT-javadoc.jar、hello-world-1.0-SNAPSHOT-sources.jar這樣的一些附屬輸出文件。需要我們注意的是,不能直接定義項目的classifier,因爲附屬輸出文件不是項目直接默認生成的,而是由附加的插件幫助生成的。

總結

到這裏,關於Maven座標的相關知識就整理完了,回過頭來看,你會發現Maven中的座標是一個非常好理解,但是卻又非常重要,非常基礎的一個概念。不懂這個座標的概念,可能最後連pom.xml文件都看不懂,再往下的學習也就都是白搭,最後,慶幸的是這個還不是很難學習,至少看懂我這裏總結的應該木有問題;不過能看懂我這裏總結的,也就OK了。如果覺的還OK,可以點左下角的“在看”哦!!!

往期精彩回顧

1、玩轉Maven之安裝與配置

2、玩轉Maven之使用入門

書籍推薦


人生是個圓,有的人走了一輩子也沒有走出命運畫出的圓圈,其實,圓上的每一個點都有一條騰飛的切線。

玩代碼、玩技術

長按識別二維碼,關注“果凍想”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章