欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Maven依賴管理的用法介紹

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

一、依賴傳遞

1. 直接依賴與間接依賴

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

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

實(shí)例如 spring-webmvc:

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

學(xué)習(xí) Spring 時(shí)需要導(dǎo)入 spring-context 依賴,但學(xué)習(xí) SpringMVC 時(shí),我們會(huì)導(dǎo)入 spring-webmvc,此時(shí)即便會(huì)用到 Spring 的功能也無需再導(dǎo)入 spring-context。因?yàn)?spring-webmvc 依賴了 spring-context,spring-context 作為間接依賴被引入到了項(xiàng)目中,可以直接使用

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

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

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

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

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

如下例:

<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,但它是間接依賴,所以項(xiàng)目中所使用的 spring-context 資源是 5.1.19 版本的(但并不代表 webmvc 中的 context 版本也被改為了 5.1.19),圖中也可以看到 IDEA 在依賴后邊給出了沖突標(biāo)識(shí)

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

相同層級(jí)的依賴資源,先被聲明的優(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>

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

(3) 后聲明覆蓋先聲明

同時(shí)聲明了同一個(gè)依賴的不同版本,那么先聲明的版本會(huì)被最后聲明的版本覆蓋掉(以最后一次聲明為準(zhǔn))

如下例:

<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ā)時(shí),合理的管理依賴能夠避免掉依賴沖突可能帶來的麻煩。

1. 可選依賴

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

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

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

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

2. 排除依賴

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

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

<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è)置后,本項(xiàng)目不會(huì)加載 spring-webmvc 依賴中包含的 spring-aop 和 spring-core

3. 可選依賴與排除依賴的異同點(diǎn)

相同點(diǎn):

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

不同點(diǎn):

  • 原理不同:可選依賴對(duì)外不透明,排除依賴有傳遞但不采用
  • 生效時(shí)機(jī)不同:可選依賴生效在項(xiàng)目被引入時(shí),排除依賴生效在引入其他項(xiàng)目時(shí)

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

相關(guān)文章

  • Java+Eclipse+Selenium環(huán)境搭建的方法步驟

    Java+Eclipse+Selenium環(huán)境搭建的方法步驟

    這篇文章主要介紹了Java+Eclipse+Selenium環(huán)境搭建的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • mybatis攔截器及不生效的解決方法

    mybatis攔截器及不生效的解決方法

    本文主要介紹了mybatis攔截器及不生效的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一篇文章教會(huì)你使用java爬取想要的資源

    一篇文章教會(huì)你使用java爬取想要的資源

    這篇文章主要介紹了使用java爬蟲爬取想要的資源,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java單例模式的應(yīng)用示例

    Java單例模式的應(yīng)用示例

    這篇文章主要介紹了Java單例模式的應(yīng)用示例,需要的朋友可以參考下
    2014-02-02
  • SpringBoot數(shù)據(jù)庫初始化datasource配置方式

    SpringBoot數(shù)據(jù)庫初始化datasource配置方式

    這篇文章主要為大家介紹了SpringBoot數(shù)據(jù)庫初始化datasource配置方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Maven離線模式打包全過程

    Maven離線模式打包全過程

    這篇文章主要介紹了Maven離線模式打包全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 淺談java多態(tài)的實(shí)現(xiàn)主要體現(xiàn)在哪些方面

    淺談java多態(tài)的實(shí)現(xiàn)主要體現(xiàn)在哪些方面

    下面小編就為大家?guī)硪黄獪\談java多態(tài)的實(shí)現(xiàn)主要體現(xiàn)在哪些方面。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法

    SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法

    這篇文章主要介紹了SpringBoot使用Nacos動(dòng)態(tài)配置數(shù)據(jù)源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Druid監(jiān)控分布式實(shí)現(xiàn)過程解析

    Druid監(jiān)控分布式實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Druid監(jiān)控分布式實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Spark JDBC操作MySQL方式詳細(xì)講解

    Spark JDBC操作MySQL方式詳細(xì)講解

    這篇文章主要介紹了Spark JDBC操作MySQL方式,Spark SQL可以通過JDBC從傳統(tǒng)的關(guān)系型數(shù)據(jù)庫中讀寫數(shù)據(jù),讀取數(shù)據(jù)后直接生成的是DataFrame,然后再加上借助于Spark SQL豐富的API來進(jìn)行各種操作
    2023-02-02

最新評(píng)論