最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Maven依賴管理的用法介紹

 更新時間:2022年08月30日 09:45:35   作者:mzz124  
依賴管理是項目管理中非常重要的一環(huán)。幾乎任何項目開發(fā)的時候需要都需要使用到庫。而這些庫很可能又依賴別的庫,這樣整個項目的依賴形成了一個樹狀結(jié)構(gòu),而隨著這個依賴的樹的延伸和擴大,一系列問題就會隨之產(chǎn)生

一、依賴傳遞

1. 直接依賴與間接依賴

pom.xml 聲明了的依賴是直接依賴,依賴中又包含的依賴就是間接依賴(直接依賴的直接依賴),間接依賴雖然未被聲明,但也是依賴所必須的依賴,同時間接依賴中的資源也可以直接使用

比如 A 依賴了 B,B 依賴了 C,那么 A 也就間接的依賴了 C,如果沒有 C,那么 A 和 B 都無法正常運行,A 也可以直接使用 C 的內(nèi)容,而可以不必再聲明 C

實例如 spring-webmvc:

 <dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>5.2.10.RELEASE</version>
</dependency>

學習 Spring 時需要導入 spring-context 依賴,但學習 SpringMVC 時,我們會導入 spring-webmvc,此時即便會用到 Spring 的功能也無需再導入 spring-context。因為 spring-webmvc 依賴了 spring-context,spring-context 作為間接依賴被引入到了項目中,可以直接使用

2. 依賴傳遞沖突時的優(yōu)先規(guī)則

假如一個項目中或直接或間接的多次導入了同一個依賴,就會產(chǎn)生依賴沖突,此時 Maven 會按照下面三種優(yōu)先規(guī)則確定真正依賴的是哪個包:(主要討論不同版本的依賴,相同版本沒什么所謂)

(1) 路徑優(yōu)先

直接依賴優(yōu)先級最高,其次是間接依賴,然后是間接依賴的直接依賴,間接依賴的間接依賴 ……

層級越深,優(yōu)先級越低,或者說就近原則,離項目最近的包就是項目真正所依賴的

如下例:

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.19.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>

示例中引入了 spring-context 5.1.19 為直接依賴,又引入 spring-webmvc 5.2.10,其中又依賴了 spring-context 5.2.10,但它是間接依賴,所以項目中所使用的 spring-context 資源是 5.1.19 版本的(但并不代表 webmvc 中的 context 版本也被改為了 5.1.19),圖中也可以看到 IDEA 在依賴后邊給出了沖突標識

(2) 聲明優(yōu)先

相同層級的依賴資源,先被聲明的優(yōu)先

如下例:(和剛才的一樣)

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.19.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>

和上面一樣導入 spring-context 5.1.19 和 spring-webmvc 5.2.10,可以看到 context 和 webmvc 都又依賴了 aop, beans, core 等幾個包,且都是間接依賴,層級相等,但由于先聲明的 context 5.1.19,所以其中的 aop, core 等幾個包的優(yōu)先級更高

(3) 后聲明覆蓋先聲明

同時聲明了同一個依賴的不同版本,那么先聲明的版本會被最后聲明的版本覆蓋掉(以最后一次聲明為準)

如下例:

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.1.19.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>5.2.10.RELEASE</version>
	</dependency>
</dependencies>

先聲明 spring-context 5.1.19,又聲明了 spring-context 5.2.10,最后使用的依賴版本為 5.2.10

二、依賴管理

分模塊開發(fā)時,合理的管理依賴能夠避免掉依賴沖突可能帶來的麻煩。

1. 可選依賴

用于對外隱藏本項目中使用的依賴。如果項目中將某個依賴設(shè)置為可選依賴,那么其他項目引用此項目時不會加載到可選依賴。

只需在聲明依賴時加入 optional 標簽,設(shè)置值為 true 即可(默認為 false)

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.1.19.RELEASE</version>
	<optional>true</optional>
</dependency>

如上設(shè)置后,其他項目引入此項目時,不會加載到此項目中的 spring-context 5.1.19

2. 排除依賴

引入依賴時,用于排除掉該依賴中傳遞來的指定依賴。

需要在聲明依賴時加入 exclusions 標簽,內(nèi)含多個 exclusion,設(shè)置 要排除的依賴坐標,不必指定版本

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.10.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

如上設(shè)置后,本項目不會加載 spring-webmvc 依賴中包含的 spring-aop 和 spring-core

3. 可選依賴與排除依賴的異同點

相同點:

  • 功能相同:都用于阻斷依賴的傳遞

不同點:

  • 原理不同:可選依賴對外不透明,排除依賴有傳遞但不采用
  • 生效時機不同:可選依賴生效在項目被引入時,排除依賴生效在引入其他項目時

到此這篇關(guān)于Maven依賴管理的用法介紹的文章就介紹到這了,更多相關(guān)Maven依賴管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自動配置原理詳解

    SpringBoot自動配置原理詳解

    SpringBoot的誕生就是為了簡化Spring中繁瑣的XML配置,其本質(zhì)依然還是Spring框架,使用SpringBoot之后可以不使用任何XML配置來啟動一個服務(wù),使得我們在使用微服務(wù)架構(gòu)時可以更加快速的建立一個應(yīng)用。本文將為具體介紹一下SpringBoot的原理,需要的可以參考一下
    2021-12-12
  • Java中OGNL表達式語言的使用詳解

    Java中OGNL表達式語言的使用詳解

    本文介紹了OGNL(ObjectGraphNavigationLanguage)表達式語言,這是一種用于Java語言的對象圖導航和操作的表達式語言,它支持訪問對象屬性、調(diào)用對象方法、執(zhí)行算術(shù)和邏輯運算,以及處理集合和數(shù)組等操作,OGNL的語法簡潔明了
    2024-12-12
  • java實現(xiàn)簡單猜數(shù)字游戲

    java實現(xiàn)簡單猜數(shù)字游戲

    這篇文章主要介紹了java實現(xiàn)簡單猜數(shù)字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • MyBatis?Generator?ORM層面的代碼自動生成器(推薦)

    MyBatis?Generator?ORM層面的代碼自動生成器(推薦)

    Mybatis?Generator是一個專門為?MyBatis和?ibatis框架使用者提供的代碼生成器,也可以快速的根據(jù)數(shù)據(jù)表生成對應(yīng)的pojo類、Mapper接口、Mapper文件,甚至生成QBC風格的查詢對象,這篇文章主要介紹了MyBatis?Generator?ORM層面的代碼自動生成器,需要的朋友可以參考下
    2023-01-01
  • Java中的Caffeine加載與驅(qū)逐策略詳解

    Java中的Caffeine加載與驅(qū)逐策略詳解

    這篇文章主要介紹了Java中的Caffeine加載與驅(qū)逐策略詳解,Caffeine是基于Java 8的高性能緩存庫,可提供接近最佳的命中率,Caffeine與ConcurrentMap相應(yīng),但是不完全相同,本文主要介紹Caffeine,需要的朋友可以參考下
    2023-10-10
  • 在lambda的foreach遍歷中break退出操作(lambda foreach break)

    在lambda的foreach遍歷中break退出操作(lambda foreach break)

    這篇文章主要介紹了在lambda的foreach遍歷中break退出操作(lambda foreach break),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • JavaGUI實現(xiàn)隨機單詞答題游戲

    JavaGUI實現(xiàn)隨機單詞答題游戲

    這篇文章主要為大家詳細介紹了JavaGUI實現(xiàn)隨機單詞答題游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Mybatis逆向工程筆記小結(jié)

    Mybatis逆向工程筆記小結(jié)

    MyBatis官方為我們提供了一個逆向工程,通過這個逆向工程,只需要建立好數(shù)據(jù)表,MyBatis就會根據(jù)這個表自動生成pojo類、mapper接口、sql映射文件,本文主要介紹了Mybatis逆向工程筆記小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Java中斷異常的正確處理方法

    Java中斷異常的正確處理方法

    這篇文章主要給大家介紹了關(guān)于Java中斷異常的正確處理方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • SpringBoot前后端分離實現(xiàn)驗證碼操作

    SpringBoot前后端分離實現(xiàn)驗證碼操作

    驗證碼的功能是防止非法用戶惡意去訪問登錄接口而設(shè)置的一個功能,今天我們就來看看在前后端分離的項目中,SpringBoot是如何提供服務(wù)的
    2022-05-05

最新評論

星子县| 奉新县| 柳林县| 中江县| 上饶市| 麻阳| 中西区| 竹山县| 嵊泗县| 本溪市| 正蓝旗| 昂仁县| 青岛市| 北川| 自贡市| 盐城市| 洛隆县| 苍山县| 武邑县| 广灵县| 勐海县| 襄城县| 高雄县| 聂拉木县| 饶河县| 富宁县| 抚州市| 四川省| 阜阳市| 织金县| 海淀区| 银川市| 桂东县| 买车| 武安市| 漳平市| 长白| 平舆县| 海林市| 松桃| 泽库县|