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

Maven Scope 取值范圍小結(jié)

 更新時間:2024年05月07日 10:16:10   作者:老貓喜歡今日爬山  
在Maven項目的pom.xml文件中,通常會給dependency設(shè)置scope屬性,本文主要介紹了Maven Scope 取值范圍,具有一定的參考價值,感興趣的可以了解一下

在Maven項目的pom.xml文件中,通常會給dependency設(shè)置scope屬性,規(guī)定依賴jar包的使用范圍。

scope有以下5個取值:

1、compile(默認(rèn)值)

  • 被依賴項目需要參與到當(dāng)前項目的編譯。
  • 適用于所有階段:測試,打包,運行。

2、provided:

  • 含義:被依賴項目理論上可以參與編譯、測試、運行等階段,相當(dāng)于compile,但是在打包階段做了exclude的動作。
  • 適用場景:例如, 如果我們在開發(fā)一個web 應(yīng)用,在編譯時我們需要依賴 servlet-api.jar,但是在運行時我們不需要該 jar 包,因為這個 jar 包已由應(yīng)用服務(wù)器提供,此時我們需要使用 provided 進(jìn)行范圍修飾(JDK 或者一個容器已提供該依賴)。

3、test

  • 含義:表示被依賴項目僅僅參與測試相關(guān)的工作
  • 適用階段:適用于測試階段的編譯、運行,項目打包時不會加入
  • 適用場景:如junit

4、runtime

  • 適用階段:運行、測試,編譯階段不適用
  • 適用場景:例如,在編譯的時候我們不需要 JDBC API 的 jar 包,而在運行的時候我們才需要 JDBC 驅(qū)動包。

5、system

  • system 元素與 provided 元素類似,但是被依賴項不會從 maven 倉庫中查找,而是從本地系統(tǒng)中獲取,systemPath 元素用于制定本地系統(tǒng)中 jar 文件的路徑

6、import

它只使用在<dependencyManagement>中,表示從其它的pom中導(dǎo)入dependency的配置,例如 (B項目導(dǎo)入A項目中的包配置):
想必大家在做SpringBoot應(yīng)用的時候,都會有如下代碼:

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

繼承一個父模塊,然后再引入相應(yīng)的依賴。

假如說,我不想繼承,或者我想繼承多個,怎么做?

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

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

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

那么,如何用這個方法來解決SpringBoot的那個繼承問題呢?

配置如下:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.3.3.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>

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

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

相關(guān)文章

最新評論

合山市| 连云港市| 马鞍山市| 五寨县| 江西省| 郧西县| 松潘县| 邵武市| 宾川县| 定安县| 浦东新区| 张掖市| 福海县| 汝阳县| 博野县| 东丰县| 土默特右旗| 康定县| 永顺县| 蕲春县| 营口市| 健康| 上蔡县| 库伦旗| 华亭县| 邹城市| 华安县| 阜城县| 潮州市| 和龙市| 时尚| 济宁市| 西乌| 柘城县| 华池县| 池州市| 阳高县| 郎溪县| 南川市| 青海省| 云林县|