Maven -- dependency详解
PS:部分來源官網文檔,翻譯不到位,請移步官網
一 :type:個人理解:依賴<dependency>通過其子標簽? ?定位了某個特定的唯一構件,所以type--依賴類型,更準確的說應該是依賴的構件的類型。它指定了應該用什么樣的插件來處理該構件。
構件:在Maven中,任何依賴(jar包,tomcat等),或項目(自己打包的jar,war等)輸出都可成為構件。每個構件都有自己的唯一標識(唯一坐標),由groupId,artifactId,和version等信息構成,由此,Maven就可以對構件進行版本控制,管理。任何可以被Maven的坐標系統唯一標識的對象都是一個Maven構件,但是,只包含其他POM文件(該文件本身不產生構件,打包方式為pom)使用定義的POM文件也是一個Maven構件。
依賴的類型,通常但并不總是代表依賴文件的擴展名。類型可以映射到不同的擴展名和分類器,類型通常與所使用的包裝方式相對應,但也不都是如此。<packaging>xxx</packaging>。常見的有 jar, war, ejb-client, test-jar等等 。另,type的默認值為jar。以下是官網列出的一些默認處理方式列表,但這不是全部。插件也可以通過將extension設置為true,從而產生新的type定義。
涉及到插件知識,這里只是提到相關的一部分。The?<plugin>?element contains informations required for a plugin,其中有個子標簽<extensions>, 官網對其的解釋為:“是否從該插件加載Maven擴展(如打包和類型處理程序 such as packaging and type handlers)。出于性能原因,這應該只在必要時啟用,注意:由于技術原因,這個字段的類型是String,而語義類型實際上是Boolean,默認為false” 。這中間的細節暫不做深究,這里主要是弄清type的概念意義。
想起以前看到的一句話,Maven就是一個插件集合,(以下是我個人觀點,我不確定是否正確)我認為任何構件都是通過一些插件按照其pom文件指定的build方式產生的,該過程可以指定插件以及插件的工作方式,也可以完全采取默認方式。約定由于配置。
同一個工程,其build方式不同,自然也會產生不同的構件。所以我們在指定依賴的時候,有時若我們想依賴的并不是jar類型的構件,則需要指出其type,若有必要,還需更進一步指出其分類器classifier。實際上,通過gav確定的坐標體系并沒有具體到某一個構件,它真正指向的可能是類似這樣的一組文件,默認會在文件中選擇默認值 type 為 jar, calssifier 為 null 的那份構件(我們可以稱之為主構件和附加構件吧)用于匹配dependency引用的最小信息集實際上是{groupId,artifactId,version,type,classifier},然而多數情況下,這些依賴關系將引用的通常是沒有classifier的jar依賴。所以我們不需要補充type和classifier信息,因為type的默認值是jar,并且默認classifier為null
然而,在下列這種情況下,光靠gav已經找不到對應構件了,這時候便需要classifier指定特定版本
二:classifier:構件分類器,幫助定義構建輸出的一些附屬構件。如spring-core.jar,還生成有文檔javadoc.jar,源碼sources.jar。通常追加組成構件的文件名,跟在version之后,默認為null。通過指定分類器,可以指向不同的附加構件,比如sources和javadoc。它也可以用于區分 由同一份pom但build方式不同生成的一組構件,如上例中使用jdk13和jdk15。注意:type通常是和classifier一起使用的,兩者具有配對關系,兩者不匹配會導致找不到指定構件。
其他屬性參考文章https://blog.csdn.net/VVVZCS/article/details/81625547,暫時沒空深究
總結
以上是生活随笔為你收集整理的Maven -- dependency详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Storm集群的安装及简单使用
- 下一篇: 立项报告