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

Maven中dependency標(biāo)簽參數(shù)的使用小結(jié)

 更新時(shí)間:2026年07月15日 09:30:52   作者:lgily-1225  
本文詳細(xì)解讀dependency標(biāo)簽的type、classifier、optional、scope、systemPath和exclusions等參數(shù),幫你理清依賴傳遞規(guī)則,輕松解決jar包沖突和版本管理問題

Maven中dependency標(biāo)簽參數(shù)如下:

        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
            <type></type>
            <optional></optional>
            <scope></scope>
            <classifier></classifier>
            <systemPath></systemPath>
            <exclusions></exclusions>
        </dependency>

一、type

有時(shí)候我們引入某一個(gè)依賴時(shí),必須指定type,這是因?yàn)橛糜谄ヅ鋎ependency引用和dependencyManagement部分的最小信息集實(shí)際上是{groupId,artifactId,type,classifier}。在很多情況下,這些依賴關(guān)系將引用沒有classifier的jar依賴。這允許我們將標(biāo)識設(shè)置為{groupId,artifactId},因?yàn)閠ype的默認(rèn)值是jar,并且默認(rèn)classifier為null。

type的值一般有jar、war、pom等,聲明引入的依賴的類型。

二、classifier

Classifier可能是最容易被忽略的Maven特性,但它確實(shí)非常重要,我們也需要它來幫助規(guī)劃坐標(biāo)。設(shè)想這樣一個(gè)情況,有一個(gè)jar項(xiàng)目,就說是 dog-cli-1.0.jar 吧,運(yùn)行它用戶就能在命令行上畫一只小狗出來?,F(xiàn)在用戶的要求是希望你能提供一個(gè)zip包,里面不僅包含這個(gè)可運(yùn)行的jar,還得包含源代碼和文檔,換句話說,這是比較正式的分發(fā)包。這個(gè)文件名應(yīng)該是怎樣的呢?dog-cli-1.0.zip?不夠清楚,僅僅從擴(kuò)展名很難分辨什么是Maven默認(rèn)生成的構(gòu)件,什么是額外配置生成分發(fā)包。如果能是dog-cli-1.0-dist.zip就最好了。這里的dist就是classifier,默認(rèn)Maven只生成一個(gè)構(gòu)件,我們稱之為主構(gòu)件,那當(dāng)我們希望Maven生成其他附屬構(gòu)件的時(shí)候,就能用上classifier。常見的classifier還有如dog-cli-1.0-sources.jar表示源碼包,dog-cli-1.0-javadoc.jar表示JavaDoc包等等。

classifier它表示在相同版本下針對不同的環(huán)境或者jdk使用的jar,如果配置了這個(gè)元素,則會(huì)將這個(gè)元素名在加在最后來查找相應(yīng)的jar,例如:

上面的例子
<classifier>sources</classifier>
<classifier>javadoc</classifier>
給相同的version,構(gòu)建不同的環(huán)境使用依賴
<classifier>jdk17</classifier>
<classifier>jdk18</classifier>

三、optional

當(dāng)project-A 依賴project-B, project-B 依賴project-D時(shí)

<dependency>
  <groupId>sample.ProjectD</groupId>
  <artifactId>ProjectD</artifactId>
  <version>1.0-SNAPSHOT</version>
  <optional>true</optional>
</dependency>

所以當(dāng)project-B的true時(shí), project-A中如果沒有顯式的引入project-D, 則project-A不依賴project-D, 即project-A可以自己選擇是否依賴project-D

默認(rèn)的值為false, 及子項(xiàng)目必須依賴。

四、scope

scope的分類:

compile

默認(rèn)就是compile,什么都不配置也就是意味著compile。compile表示被依賴項(xiàng)目需要參與當(dāng)前項(xiàng)目的編譯,當(dāng)然后續(xù)的測試,運(yùn)行周期也參與其中,是一個(gè)比較強(qiáng)的依賴。打包的時(shí)候通常需要包含進(jìn)去。

test

scope為test表示依賴項(xiàng)目僅僅參與測試相關(guān)的工作,包括測試代碼的編譯,執(zhí)行。比較典型的如junit。

runntime

runntime表示被依賴項(xiàng)目無需參與項(xiàng)目的編譯,不過后期的測試和運(yùn)行周期需要其參與。與compile相比,跳過編譯而已,說實(shí)話在終端的項(xiàng)目(非開源,企業(yè)內(nèi)部系統(tǒng))中,和compile區(qū)別不是很大。比較常見的如JSR×××的實(shí)現(xiàn),對應(yīng)的API jar是compile的,具體實(shí)現(xiàn)是runtime的,compile只需要知道接口就足夠了。oracle jdbc驅(qū)動(dòng)架包就是一個(gè)很好的例子,一般scope為runntime。另外runntime的依賴通常和optional搭配使用,optional為true。我可以用A實(shí)現(xiàn),也可以用B實(shí)現(xiàn)。

provided

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

system

從參與度來說,也provided相同,不過被依賴項(xiàng)不會(huì)從maven倉庫抓,而是從本地文件系統(tǒng)拿,一定需要配合systemPath屬性使用。

import(only available in Maven 2.0.9 or later)

這個(gè)是maven2.0.9版本后出的屬性,import只能在dependencyManagement的中使用,能解決maven單繼承問題,import依賴關(guān)系實(shí)際上并不參與限制依賴關(guān)系的傳遞性。

使用import scope解決maven繼承(單)問題

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。

五、systemPath

當(dāng)maven依賴本地而非repository中的jar包,sytemPath指明本地jar包路徑,例如:

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

六、exclusions

依賴排除,就是有時(shí)候引入某一個(gè)依賴的時(shí)候,該依賴下有jar包沖突,可以排除掉,不引用該jar,例如:

        <dependency>
            <groupId>test</groupId>
            <artifactId>test</artifactId>
            <version>1.0.2-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

到此這篇關(guān)于Maven中dependency標(biāo)簽參數(shù)的使用小結(jié)的文章就介紹到這了,更多相關(guān)Maven dependency標(biāo)簽參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java png圖片修改像素rgba值的操作

    Java png圖片修改像素rgba值的操作

    這篇文章主要介紹了Java png圖片修改像素rgba值的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 關(guān)于Spring統(tǒng)一異常處理及說明

    關(guān)于Spring統(tǒng)一異常處理及說明

    這篇文章主要介紹了關(guān)于Spring統(tǒng)一異常處理及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Spring Boot 2.x基礎(chǔ)教程之配置元數(shù)據(jù)的應(yīng)用

    Spring Boot 2.x基礎(chǔ)教程之配置元數(shù)據(jù)的應(yīng)用

    這篇文章主要介紹了Spring Boot 2.x基礎(chǔ)教程之配置元數(shù)據(jù)的應(yīng)用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • java中的i++和++i的區(qū)別詳解

    java中的i++和++i的區(qū)別詳解

    這篇文章主要介紹了java中的i++和++i的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot中排查內(nèi)存泄漏的方法小結(jié)

    SpringBoot中排查內(nèi)存泄漏的方法小結(jié)

    內(nèi)存泄漏是項(xiàng)目開發(fā)中常見且棘手的問題,它會(huì)導(dǎo)致應(yīng)用性能下降、響應(yīng)變慢,嚴(yán)重時(shí)甚至?xí)l(fā)OutOfMemoryError異常導(dǎo)致應(yīng)用崩潰,下面我們就來看看SpringBoot排查內(nèi)存泄漏的常用方法吧
    2025-06-06
  • java8時(shí)間間隔類Duration和Period示例代碼

    java8時(shí)間間隔類Duration和Period示例代碼

    文章解釋了Java中Duration和Period的區(qū)別,并提供了它們的特點(diǎn)、適用場景和常見用途,文中還提供了每個(gè)類的常用方法和示例,感興趣的朋友一起看看吧
    2026-04-04
  • Java 中Timer和TimerTask 定時(shí)器和定時(shí)任務(wù)使用的例子

    Java 中Timer和TimerTask 定時(shí)器和定時(shí)任務(wù)使用的例子

    這篇文章主要介紹了Java 中Timer和TimerTask 定時(shí)器和定時(shí)任務(wù)使用的例子,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • 一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    java反射機(jī)制是一個(gè)很好用的東西,用它可以解決很多死的東西,因?yàn)榉瓷錂C(jī)制的靈活行很大,有了他,我們就不要花太多的時(shí)間來寫操做數(shù)據(jù)庫的代碼了,這個(gè)可以很大的減少開發(fā)時(shí)間,而且代碼的可讀性好
    2021-09-09
  • Java視頻格式轉(zhuǎn)化的實(shí)現(xiàn)方法

    Java視頻格式轉(zhuǎn)化的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Java視頻格式轉(zhuǎn)化的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Mybatis實(shí)現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式)

    Mybatis實(shí)現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式)

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論

松潘县| 香港 | 平阳县| 科技| 云林县| 陵水| 东港市| 弥勒县| 洛川县| 西盟| 手机| 清水县| 正宁县| 贵南县| 乃东县| 额敏县| 靖远县| 长治市| 德格县| 公安县| 河南省| 九江市| 滦南县| 夹江县| 厦门市| 延寿县| 同仁县| 荆门市| 遵化市| 益阳市| 武义县| 肇庆市| 前郭尔| 招远市| 峨眉山市| 平乐县| 安泽县| 建瓯市| 昌宁县| 旅游| 安吉县|