Maven學習筆記2(座標和依賴)

一、座標java

   Maven座標爲各個構件創建了秩序,任何一個構件都必須明確本身的座標,一個maven座標是由一些元素肯定的mysql

<groupId>com.alivn.account</groupId>
    <artifactId>account-email</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

groupId:定義爲maven項目隸屬的實際項目,能夠至關於爲一個項目的頂級。 好比 支付系統sql

artifactId:maven項目的一個子項目    好比 支付系統下的dao模塊數據庫

version:當前項目的版本號api

packaging:定義該maven項目的打包方式   默認jar  tomcat

classifier:幫助構建輸出一些附屬屬性,好比account-email.1.0.jar, 藉助插件生成account-email.1.0-doc.jar(apiw文檔)框架

二、依賴maven

每一個project根元素下,能夠包含節點<dependencies>節點。裏面包含了若干依賴ide

<dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.7</version>
           <scope>test</scope>
           <type>jar</type>
           <optional>true</optional>
           <exclusions>
               <exclusion>
                   <groupId>${dependencygroupId}</groupId>
                   <artifactId>${dependencyartifactId}</artifactId>
               </exclusion>
           </exclusions>
       </dependency>

groupId、artifactId、version是一個引入一個依賴必不可少的元素。測試

scope:依賴的做用範圍   test表示 只在test的代碼裏面的生效

type:依賴的類型  對應packaging

optional:依賴是否可選。

exclusions:排除依賴,當第二依賴裏面依賴了一個不穩定的快照版本的jar時候,存在潛在危險,因此咱們應該排除第二依賴裏面的那個不穩定版本的依賴,在pom中引用爲直接依賴。

三、依賴範圍

maven在編譯  測試 和運行時會使用三個不一樣的classpath,會根據以依賴範圍處理不一樣的內容,好比主編譯時,不會加入scope爲test範圍的代碼,由於它的依賴範圍是test

有如下幾種依賴範圍

compile:編譯依賴範圍  默認值   對編譯  測試  運行 三種 classpath都有效

test:測試依賴範圍  只對測試classpath有效

provided:以提供以來範圍,僅對編譯和測試有效,運行無效,好比servlet-*jar,運行時  框架有tomcat提供jar

runtime:對測試和運行有效  但編譯無效    如JDBC驅動,只在運行的時候決定使用哪一個數據庫的驅動

system:系統依賴範圍,和provided範圍一致,但必須經過systemPath顯示指定依賴文件

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
            <scope>system</scope>
            <systemPath>${home}/lib/mysql.rt</systemPath>
        </dependency>

四、傳遞性依賴

A->B ,B->C=》A->C

若是A依賴於B  B依賴於C 那麼A依賴於C    B爲A 的第一直接依賴  C爲B 的第二直接依賴。

根據scope的依賴範圍不一樣  能夠將C於A 的依賴範圍 也會有變化 ,具體變化爲如下表格    藍色字體爲第一直接依賴   紅色字體爲第二直接依賴

依賴範圍 compile test provided runtime
compile compile —— —— runtime
test test —— —— test
provided provided —— provided provided
runtime runtime —— —— runtime

 

五、依賴調解

maven傳遞依賴爲咱們帶來了不少的方便,可是若是 A->B->C(2.0)      A->D->C(1.0) 這個時候會解析 哪一個版本的C

maven有兩條規則:(當第一條規則 不生效時 使用第二條規則)

一、路徑最近者優先     實例中 都是兩步  距離是相同的   若是不一樣則去最近者

二、第一聲明者優先    程序中  看B 和C 哪一個jar裏面的類先被使用,而後解析先被使用的jar的那條線路上的c

六、查看依賴的命令

mvn dependency:list(顯示全部已解析的依賴)

mvn dependency:tree(顯示依賴樹)

mvn dependency:analyze(分析當前項目的依賴)

相關文章
相關標籤/搜索