maven的依賴範圍和依賴傳遞

1.依賴範圍

在這裏插入圖片描述
非compile範圍依賴不能傳遞

2.maven依賴傳遞

依賴的傳遞性:如果A—>B,B—>C,那麼A—>C。無限層傳遞。
假設現在:
(1)
A----->B------>C

A自己有依賴了C,如果A現在自己又依賴了C,如果A依賴的C和B傳遞過來的
C版本不一樣那麼這時候就會有問題

我在第一個maven工程:
在這裏插入圖片描述
然後在第2個工程中依賴了第一個maven工程同時又定義了:

在這裏插入圖片描述
log4j的版本爲1.2.16如圖提示依賴衝突:

在這裏插入圖片描述
我們也可以安裝一個maven Helper的插件:

在這裏插入圖片描述
(2)
A----->M------>D1.0
A ----->N------>D1.1

2個D的版本不一致那麼現在就會有版本問題

在這裏插入圖片描述
2個工程都有log4j的依賴

3.依賴排除

方式一:在聲明依賴處排除,適合單處排除。

		<exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
       </exclusions>

在這裏插入圖片描述

方式二:在遠聲明依賴處排除,適合多處排除。

<optional>true</optional>

4.maven自己提供的解決衝突的原則

1、最短路徑原則:

maven-04-dependency--->maven-03-dependencied2--->maven-03-dependencied---->log4j1.2.12
	                    --->maven-03-commons------>log4j1.2.11

2、最先聲明原則(路徑一樣長)

maven-04-dependency--->maven-03-dependencied2---->log4j1.2.12
	                   --->maven-03-commons------>log4j1.2.11

取最先定義的log4j1.2.12

5.maven的全局變量

自定義變量:
      <properties>
        <spring.version>4.3.11.RELEASE</spring.version>
      </properties>

       ${變量名}  ${spring.version}

      內置變量:maven定義好的,可以直接使用
      ${project.version}

6.maven繼承

Maven的聚合:在maven中每一個工程都具有獨立構件能力,但是如果工程數量增多,而且工程之間有依賴關係,手動構建很麻煩,幾乎不可能手動構建。
所謂聚合,就是把多個模塊或項目聚合到一起,創建一個專門的工程進行統一進行管理和構建。
在pom中使用標籤來實現,Maven會自動分析模塊之間的構建順序和依賴關係。

1、子POM可以從父POM中繼承的元素:
           groupId、version、properties、dependencies、build、repositories、pluginRepositories、distributionManagement、dependencyManagement
           <finalName>雖然能繼承,但是一般都是配置自己的名字。
2、打包方式<packaging>jar(默認。java工程)war(web工程)pom(所有含有子模塊的模塊,打包方式必須是pom)
          父POM的打包方式必須是pom。
 3、所有模塊或者大多數模塊都會使用的配置,在父POM中聲明:
          properties、groupId、version、dependencies(非compile範圍的公共依賴)、build(plugins)
	  dependencies(非compile範圍的公共依賴):junit、servlet、jsp
	
	<dependencies>:聲明依賴,實際引入。
    <dependencyManagement>:管理依賴。聲明依賴,不實際引入,僅僅是聲明。

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