亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Maven dependency中的scope案例講解

 更新時(shí)間:2024年02月03日 11:15:03   作者:_江嶼_  
Maven的一個(gè)哲學(xué)是慣例優(yōu)于配置(Convention Over Configuration), Maven默認(rèn)的依賴配置項(xiàng)中,scope的默認(rèn)值是compile,本文給大家介紹Maven dependency中的scope案例講解,感興趣的朋友跟隨小編一起看看吧

     Maven的一個(gè)哲學(xué)是慣例優(yōu)于配置(Convention Over Configuration), Maven默認(rèn)的依賴配置項(xiàng)中,scope的默認(rèn)值是compile。

scope的分類

compile(默認(rèn))

含義: compile 是默認(rèn)值,如果沒有指定 scope 值,該元素的默認(rèn)值為 compile。被依賴項(xiàng)目需要參與到當(dāng)前項(xiàng)目的編譯,測(cè)試,打包,運(yùn)行等階段。打包的時(shí)候通常會(huì)包含被依賴項(xiàng)目。

provided

       provided意味著打包的時(shí)候可以不用包進(jìn)去,別的設(shè)施(Web Container)會(huì)提供。事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測(cè)試,運(yùn)行等周期。相當(dāng)于compile,但是在打包階段做了exclude的動(dòng)作。

含義:被依賴項(xiàng)目理論上可以參與編譯、測(cè)試、運(yùn)行等階段,相當(dāng)于compile,但是再打包階段做了exclude的動(dòng)作。
適用場(chǎng)景:例如, 如果我們?cè)陂_發(fā)一個(gè)web 應(yīng)用,在編譯時(shí)我們需要依賴 servlet-api.jar,但是在運(yùn)行時(shí)我們不需要該 jar 包,因?yàn)檫@個(gè) jar 包已由應(yīng)用服務(wù)器提供,此時(shí)我們需要使用 provided 進(jìn)行范圍修飾。

runtime

runntime表示被依賴項(xiàng)目無(wú)需參與項(xiàng)目的編譯,不過后期的測(cè)試和運(yùn)行周期需要其參與。

含義:表示被依賴項(xiàng)目無(wú)需參與項(xiàng)目的編譯,但是會(huì)參與到項(xiàng)目的測(cè)試和運(yùn)行。與compile相比,被依賴項(xiàng)目無(wú)需參與項(xiàng)目的編譯。
適用場(chǎng)景:例如,在編譯的時(shí)候我們不需要 JDBC API 的 jar 包,而在運(yùn)行的時(shí)候我們才需要 JDBC 驅(qū)動(dòng)包。

test

含義: 表示被依賴項(xiàng)目僅僅參與測(cè)試相關(guān)的工作,包括測(cè)試代碼的編譯,執(zhí)行。
適用場(chǎng)景:例如,Junit 測(cè)試。

system

含義:system 元素與 provided 元素類似,但是被依賴項(xiàng)不會(huì)從 maven 倉(cāng)庫(kù)中查找,而是從本地系統(tǒng)中獲取,systemPath 元素用于制定本地系統(tǒng)中 jar 文件的路徑。例如:

<dependency>
    <groupId>org.open</groupId>
    <artifactId>open-core</artifactId>
    <version>1.5</version>
    <scope>system</scope>
    <systemPath>${basedir}/WebContent/WEB-INF/lib/open-core.jar</systemPath>
</dependency>

import

它只使用在<dependencyManagement>中,表示從其它的pom中導(dǎo)入dependency的配置,例如 (B項(xiàng)目導(dǎo)入A項(xiàng)目中的包配置):

想必大家在做SpringBoot應(yīng)用的時(shí)候,都會(huì)有如下代碼:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.6.RELEASE</version>
</parent>

繼承一個(gè)父模塊,然后再引入相應(yīng)的依賴。
假如說(shuō),我不想繼承,或者我想繼承多個(gè),怎么做?

我們知道Maven的繼承和Java的繼承一樣,是無(wú)法實(shí)現(xiàn)多重繼承的,如果10個(gè)、20個(gè)甚至更多模塊繼承自同一個(gè)模塊,那么按照我們之前的做法,這個(gè)父模塊的dependencyManagement會(huì)包含大量的依賴。如果你想把這些依賴分類以更清晰的管理,那就不可能了,import scope依賴能解決這個(gè)問題。你可以把dependencyManagement放到單獨(dú)的專門用來(lái)管理依賴的pom中,然后在需要使用依賴的模塊中通過import scope依賴,就可以引入dependencyManagement。例如可以寫這樣一個(gè)用于依賴管理的pom:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.sample</groupId>
    <artifactId>base-parent1</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactid>junit</artifactId>
                <version>4.8.2</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactid>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

然后我就可以通過非繼承的方式來(lái)引入這段依賴管理配置

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.test.sample</groupId>
            <artifactid>base-parent1</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependency>
    <groupId>junit</groupId>
    <artifactid>junit</artifactId>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactid>log4j</artifactId>
</dependency>

注意:import scope只能用在<dependencyManagement>里面

這樣,父模塊的pom就會(huì)非常干凈,由專門的packaging為pom來(lái)管理依賴,也契合的面向?qū)ο笤O(shè)計(jì)中的單一職責(zé)原則。此外,我們還能夠創(chuàng)建多個(gè)這樣的依賴管理pom,以更細(xì)化的方式管理依賴。這種做法與面向?qū)ο笤O(shè)計(jì)中使用組合而非繼承也有點(diǎn)相似的味道。

那么,如何用這個(gè)方法來(lái)解決SpringBoot的那個(gè)繼承問題呢?

配置如下:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.6.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

這樣配置的話,自己的項(xiàng)目里面就不需要繼承SpringBoot的module了,而可以繼承自己項(xiàng)目的module了。

scope的依賴傳遞

       A–>B–>C。當(dāng)前項(xiàng)目為A,A依賴于B,B依賴于C。知道B在A項(xiàng)目中的scope,那么怎么知道C在A中的scope呢?

答案是:
      當(dāng)C是test或者provided時(shí),C直接被丟棄,A不依賴C;
      否則A依賴C,C的scope繼承于B的scope。

下面是一張nexus畫的圖。

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

相關(guān)文章

  • 詳解Spring中的AOP及AspectJ五大通知注解

    詳解Spring中的AOP及AspectJ五大通知注解

    這篇文章主要介紹了詳解Spring中的AOP及AspectJ五大通知注解,AOP面向切面編程是一種新的方法論,是對(duì)傳統(tǒng)OOP面向?qū)ο缶幊痰难a(bǔ)充,AOP?的主要編程對(duì)象是切面(aspect),切面模塊化橫切關(guān)注點(diǎn),需要的朋友可以參考下
    2023-08-08
  • 詳細(xì)解釋什么是 Spring Bean(示例詳解)

    詳細(xì)解釋什么是 Spring Bean(示例詳解)

    Spring Bean 是由 Spring IoC 容器管理的對(duì)象實(shí)例,也是 Spring 框架的基本組件之一,本文通過示例代碼介紹Spring Bean 的作用域(Bean Scope)的相關(guān)使用方法,感興趣的朋友一起看看吧
    2023-09-09
  • Java http加簽、驗(yàn)簽實(shí)現(xiàn)方案詳解

    Java http加簽、驗(yàn)簽實(shí)現(xiàn)方案詳解

    這篇文章主要介紹了Java http加簽、驗(yàn)簽實(shí)現(xiàn)方案詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-07-07
  • Java中數(shù)組和String相互轉(zhuǎn)換的幾種常見方法

    Java中數(shù)組和String相互轉(zhuǎn)換的幾種常見方法

    這篇文章主要介紹了Java中數(shù)組和String相互轉(zhuǎn)換的幾種常見方法,每種類型都有相應(yīng)的轉(zhuǎn)換方法,如使用String類的構(gòu)造函數(shù)、toCharArray()、String.join()、Arrays.toString()、StringBuilder等,這些方法能幫助開發(fā)者高效地進(jìn)行數(shù)據(jù)類型之間的轉(zhuǎn)換,需要的朋友可以參考下
    2025-04-04
  • 幾種JAVA細(xì)粒度鎖的實(shí)現(xiàn)方式

    幾種JAVA細(xì)粒度鎖的實(shí)現(xiàn)方式

    這篇文章主要為大家詳細(xì)介紹了幾種JAVA細(xì)粒度鎖的實(shí)現(xiàn)方式,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 使用Mybatis-Plus實(shí)現(xiàn)對(duì)象屬性自動(dòng)填充功能

    使用Mybatis-Plus實(shí)現(xiàn)對(duì)象屬性自動(dòng)填充功能

    這篇文章主要介紹了如何使用Mybatis-Plus實(shí)現(xiàn)對(duì)象屬性自動(dòng)填充功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋友們下面隨著小編來(lái)一起來(lái)學(xué)習(xí)吧
    2024-01-01
  • Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言示例詳解

    Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言示例詳解

    這篇文章主要介紹了Jmeter 中 CSV 如何參數(shù)化測(cè)試數(shù)據(jù)并實(shí)現(xiàn)自動(dòng)斷言,本文通過示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解

    Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解

    這篇文章主要介紹了Spring Cloud Eureka 注冊(cè)與發(fā)現(xiàn)操作步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 詳解Java對(duì)象轉(zhuǎn)換神器MapStruct庫(kù)的使用

    詳解Java對(duì)象轉(zhuǎn)換神器MapStruct庫(kù)的使用

    在我們?nèi)粘i_發(fā)的程序中,為了各層之間解耦,一般會(huì)定義不同的對(duì)象用來(lái)在不同層之間傳遞數(shù)據(jù)。當(dāng)在不同層之間傳輸數(shù)據(jù)時(shí),不可避免地經(jīng)常需要將這些對(duì)象進(jìn)行相互轉(zhuǎn)換。今天給大家介紹一個(gè)對(duì)象轉(zhuǎn)換工具M(jìn)apStruct,代碼簡(jiǎn)潔安全、性能高,強(qiáng)烈推薦
    2022-09-09
  • Spring事務(wù)管理之如何處理刪除操作與事務(wù)回滾

    Spring事務(wù)管理之如何處理刪除操作與事務(wù)回滾

    在實(shí)際開發(fā)中,事務(wù)管理是保證數(shù)據(jù)一致性的核心機(jī)制之一,本文將通過一個(gè)實(shí)際案例,詳細(xì)分析Spring事務(wù)中的刪除操作與回滾機(jī)制,并提供優(yōu)化方案,需要的可以參考下
    2025-04-04

最新評(píng)論