国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Maven 基礎(chǔ)之依賴管理、范圍、傳遞、沖突

這篇具有很好參考價(jià)值的文章主要介紹了Maven 基礎(chǔ)之依賴管理、范圍、傳遞、沖突。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Maven 基礎(chǔ)之依賴管理、范圍、傳遞、沖突,# maven-basic,maven,maven,java

關(guān)于依賴管理

坐標(biāo)和 mvnrepository 網(wǎng)站

在 maven 中通過(guò)『坐標(biāo)』概念來(lái)確定一個(gè)唯一確定的 jar 包。坐標(biāo)的組成部分有:

元素 說(shuō)明
<groupId> 定義當(dāng)前 Maven 組織名稱
<artifactId> 定義實(shí)際項(xiàng)目名稱
<version> 定義當(dāng)前項(xiàng)目的當(dāng)前版本

[?] 注意
任意兩個(gè)不同包,它們的這三個(gè)屬性必定至少有一項(xiàng)是不同的。即,三者的「組合」必須唯一。

那么如何確定一個(gè) java 包的坐標(biāo)?通過(guò) https://mvnrepository.com 。

mvnrepository 是一個(gè)與中央倉(cāng)庫(kù)對(duì)應(yīng)的查詢系統(tǒng)。在這里你可以查詢你所需要的 java 包的坐標(biāo)。

你只需要復(fù)制粘貼你所查到的 java 包的坐標(biāo) <repository> 片段即可。

pom.xml 中"引"包

依賴管理」就是對(duì)項(xiàng)目中 jar 包的管理??梢栽?pom.xml 文件中定義 jar 包的坐標(biāo),管理依賴。

整體結(jié)構(gòu)(其它無(wú)關(guān)元素略)

project 
└── dependencies
    ├── dependency
    ├── dependency
    ├── ...
    └── dependency

例如:

<dependencies>
		<!--slf4j-api-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
		<!--slf4j-simple-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
    </dependency>

    <dependency> ... </dependency>  
    <dependency> ... </dependency>  
    <dependency> ... </dependency>  

</dependencies>

maven 項(xiàng)目會(huì)「引用」你本地倉(cāng)庫(kù)中的這些 java 包。理論上,你的本地倉(cāng)庫(kù)「應(yīng)該有」這些包,如果沒(méi)有,maven 會(huì)先從網(wǎng)絡(luò)倉(cāng)庫(kù)中下載它們。如果網(wǎng)絡(luò)倉(cāng)庫(kù)也沒(méi)有,那么 maven 會(huì)報(bào)錯(cuò)。

這些 java 庫(kù)在本地倉(cāng)庫(kù)的存放的路徑規(guī)則是:

%homepath%/.m2/repository/<groupId>/<artifactId>/<version>

例如,上面的 slf4j-api 在本地倉(cāng)庫(kù)中的存放路徑就是

C:\Users\hello world\.m2\repository\org\slf4j\slf4j-api\1.7.25

[?] 注意
需要注意的是,maven 項(xiàng)目是在「引用」這些 java 庫(kù)。在項(xiàng)目最終打包前,你的 maven 項(xiàng)目中并沒(méi)有真正地「包含」這些 java 包,你會(huì)發(fā)現(xiàn)無(wú)論你「引用」多少 java 包,你的項(xiàng)目源碼的文件夾大小實(shí)際上并沒(méi)有增加(其中只有你的項(xiàng)目源碼)。maven 就是通過(guò)這種方式來(lái)節(jié)約空間。

依賴范圍

依賴范圍
(Scope)
對(duì) main classpath 有效 對(duì) test classpath 有效 打入包中 例子
compile Yes Yes Yes log4j
test - Yes - junit
privided Yes Yes - servlet-api
runtime - - Yes jdbc 驅(qū)動(dòng)實(shí)現(xiàn)類

使用技巧:

  • compile<scope> 的默認(rèn)值;
  • 錯(cuò)將 runtime 寫(xiě)成 compile ,對(duì)項(xiàng)目無(wú)影響;
  • 錯(cuò)將 test 寫(xiě)成 compile ,對(duì)項(xiàng)目無(wú)太大影響。不影響項(xiàng)目運(yùn)行,僅僅是項(xiàng)目的 jar/war 包會(huì)變大;
  • 唯一需要仔細(xì)思考、分辨的是 provided 。如果 provided 被誤寫(xiě)成了 compile 會(huì)導(dǎo)致項(xiàng)目發(fā)布運(yùn)行時(shí)因?yàn)榘鼪_突而無(wú)法運(yùn)行,或出現(xiàn) bug 。

[!attention] 注意
你需要留意、甚至記憶哪些包應(yīng)該是 provided 的。

依賴傳遞

<dependencies>

  <!--
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
  </dependency>
  -->

  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.25</version>
  </dependency>

<dependencies>

前面的這個(gè)依賴可以將 slf4j-api 去掉,也依然可行。原因在于,雖然我們沒(méi)有聲明引用、使用 lslf4j-api ,但是我們聲明要引用、使用的 slf4j-simple 它要使用 slf4j-api ,因此,maven 仍然還是會(huì)把 slf4j-api 納入我們的項(xiàng)目中。

[?] 我們?nèi)绾沃?slf4j-simple 它會(huì)使用 slf4j-api ?

有兩種方式:

  1. 在 mvnrepository.com 中查詢 slf4j-simple 時(shí),該網(wǎng)站上會(huì)列出它所依賴的其它的包(如果有的話)。

  2. 開(kāi)發(fā)工具會(huì)有圖形化界面讓你能看到包的依賴關(guān)系,你可以直觀地看到,slf4j-simple 依賴于 slf4j-api 。這樣你可以對(duì)你的 repositories 進(jìn)行優(yōu)化。

依賴沖突

依賴沖突指的是你的項(xiàng)目中「包含了同一個(gè)包的兩個(gè)不同版本」。這種情況下通常會(huì)導(dǎo)致項(xiàng)目報(bào)錯(cuò),或啟動(dòng)失敗。

依賴沖突常見(jiàn)于兩個(gè)場(chǎng)景:

  1. 同一個(gè)項(xiàng)目的兩個(gè)開(kāi)發(fā)人員不約而同想到使用同一個(gè) java 庫(kù),而互相不知道。從而導(dǎo)致項(xiàng)目的 pom 中引入了同一個(gè)包的兩個(gè)不同版本。

  2. 項(xiàng)目依賴于 A 和 B 兩個(gè)庫(kù),看似沒(méi)有問(wèn)題,但是 B 庫(kù)本身又依賴于 A 庫(kù)(或者是,B 庫(kù)依賴于 C 庫(kù),而 C 庫(kù)依賴于 A 庫(kù))。從而導(dǎo)致項(xiàng)目中最終還是包含了 A 庫(kù)的兩個(gè)不同版本。

Maven 會(huì)自動(dòng)解決依賴沖突問(wèn)題,它基于 2 個(gè)原則來(lái)處理:

  1. 路徑最近者優(yōu)先

    項(xiàng)目 A 有如下的依賴關(guān)系:

    A -> B -> C -> X (1.0)

    A -> D -> X (2.0)

    maven 最終包含的會(huì)是 X 庫(kù)的 2.0 版本。

  2. 路徑相等,先聲明者優(yōu)先

    項(xiàng)目 A 有如下的依賴關(guān)系:

    A -> B -> Y(1.0)

    A -> C -> Y(2.0)

    若 pom 文件中 B 的依賴坐標(biāo)先于 C 進(jìn)行聲明,則最終 Y 的版本為 1.0 。

在開(kāi)發(fā)工具中,可以有圖形化界面讓你直觀地看到依賴關(guān)系,其中會(huì)將依賴沖突展示出來(lái)。IDEA 圖形化展示效果比 Eclipse 要更好。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-658463.html

到了這里,關(guān)于Maven 基礎(chǔ)之依賴管理、范圍、傳遞、沖突的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Maven教程】(四)坐標(biāo)與依賴:坐標(biāo)概念,依賴配置、范圍、傳遞性和最佳實(shí)踐 ~

    【Maven教程】(四)坐標(biāo)與依賴:坐標(biāo)概念,依賴配置、范圍、傳遞性和最佳實(shí)踐 ~

    正如前面文章所述,Maven 的一大功能是管理項(xiàng)目依賴。為了能自動(dòng)化地解析任何一個(gè) Java 構(gòu)件, Maven 就必須將它們唯一標(biāo)識(shí),這就依賴管理的底層基礎(chǔ)——坐標(biāo)。本節(jié)將詳細(xì)分析 Maven 坐標(biāo)的作用,解釋其每一個(gè)元素;在此基礎(chǔ)上,再介紹如何配置Maven, 以及相關(guān)的經(jīng)驗(yàn)和技巧

    2024年02月09日
    瀏覽(49)
  • 聊聊Maven的依賴傳遞、依賴管理、依賴作用域

    在Maven中,依賴是會(huì)傳遞的,假如在業(yè)務(wù)項(xiàng)目中引入了 spring-boot-starter-web 依賴: 那么業(yè)務(wù)項(xiàng)目不僅直接引入了 spring-boot-starter-web 依賴,還間接引入了 spring-boot-starter-web 的依賴項(xiàng): spring-boot-starter 、 spring-boot-starter-json 、 spring-boot-starter-tomcat 、 spring-web 、 spring-webmvc 。 Maven依

    2024年02月08日
    瀏覽(20)
  • 【Maven】依賴管理—導(dǎo)入jar包的三種方式、依賴范圍設(shè)置

    【Maven】依賴管理—導(dǎo)入jar包的三種方式、依賴范圍設(shè)置

    一、使用坐標(biāo)導(dǎo)入 jar 包 ?二、使用坐標(biāo)導(dǎo)入 jar 包 – 快捷方式 ?三、使用坐標(biāo)導(dǎo)入 jar 包 – 自動(dòng)導(dǎo)入 ?四、依賴范圍 1、在 pom.xml 中編寫(xiě) dependencies 標(biāo)簽 2、在 dependencies 標(biāo)簽中 使用 dependency 引入坐標(biāo) 3、定義坐標(biāo)的 groupId,artifactId,version 4、點(diǎn)擊刷新按鈕,使坐標(biāo)生效 1、

    2024年02月16日
    瀏覽(35)
  • maven的依賴范圍scope使用

    maven的依賴范圍scope使用

    標(biāo)簽的位置:dependencies/dependency/scope 標(biāo)簽的可選值:compile/test/provided/system/runtime/import #①compile 和 test 對(duì)比 main目錄(空間) test目錄(空間) 開(kāi)發(fā)過(guò)程(時(shí)間) 部署到服務(wù)器(時(shí)間) compile 有效 有效 有效 有效 test 無(wú)效 有效 有效 無(wú)效 #②compile 和 provided 對(duì)比 main目錄(空間

    2024年02月10日
    瀏覽(20)
  • 如何定位、解決maven依賴沖突問(wèn)題

    如何定位、解決maven依賴沖突問(wèn)題

    目錄 1.依賴沖突的原因 2.復(fù)現(xiàn)一個(gè)依賴沖突場(chǎng)景 3.如何定位依賴沖突 3.1.maven show dependencies 3.2.maven helper 4.依賴路徑最短優(yōu)先原則 如果maven項(xiàng)目中,A依賴于B和C,B依賴于1.0版本的D,C依賴于2.0版本的D,這時(shí)候就會(huì)出現(xiàn)依賴沖突。 ? 在A上加載使用D依賴的時(shí)候,maven會(huì)根據(jù) 依賴路

    2024年02月10日
    瀏覽(24)
  • 【Maven】如何發(fā)現(xiàn),定位,解決依賴沖突

    【Maven】如何發(fā)現(xiàn),定位,解決依賴沖突

    運(yùn)行的時(shí)候可能報(bào)出錯(cuò)誤xx類找不到xx方法,xx類找不到,很有可能就是沖突導(dǎo)致的。 idea安裝插件,maven helper 比如我有兩個(gè)依賴,guava和findbug。 他們都用到了jsr305,但是我依賴的版本不同。可以進(jìn)入pom文件點(diǎn)擊下面的通過(guò)Dependency Anazlyer來(lái)查看沖突。 可以打印出依賴關(guān)系樹(shù)

    2024年02月11日
    瀏覽(32)
  • Maven 3-Maven依賴版本沖突的分析及解決小結(jié)

    Maven 3-Maven依賴版本沖突的分析及解決小結(jié)

    舉例 A依賴于B及C,而B(niǎo)又依賴于X、Y,而C依賴于X、M,則A除引B及C的依賴包下,還會(huì)引入X,Y,M的依賴包(一般情況下了,Maven可通過(guò)scope等若干種方式控制傳遞依賴)。 這里有一個(gè)需要特別注意的,即B和C同時(shí)依賴于X,假設(shè)B依賴于X的1.0版本,而C依賴于X的2.0版本,A究竟依賴

    2024年02月03日
    瀏覽(20)
  • maven依賴jar包時(shí)版本沖突的解決

    maven依賴jar包時(shí)版本沖突的解決

    在pom.xml配置文件中,如果有兩個(gè)名稱相同版本不同的依賴聲明,那么先寫(xiě)的會(huì)生效。 直接依賴優(yōu)先于傳遞依賴,如果傳遞依賴的jar包版本沖突了,那么可以自己聲明一個(gè)指定版本的依賴jar,即可解決沖突。 傳遞依賴沖突時(shí),可以在不需要的jar的傳遞依賴中聲明排除,從而解

    2024年02月03日
    瀏覽(29)
  • java-IDEA MAVEN查看依賴樹(shù),解決jar包重復(fù)和沖突

    java-IDEA MAVEN查看依賴樹(shù),解決jar包重復(fù)和沖突

    ? ?如果這里面的依賴關(guān)系有紅線,就說(shuō)明有包沖突,一般都是版本不一致,可以在idea里下一個(gè)插件 Maven Helper, 點(diǎn)擊install并重啟IDEA ?打開(kāi)pom.xml文件,在下方會(huì)出現(xiàn)Dependency Analyzer,選擇它會(huì)出現(xiàn)重復(fù)依賴列表,選擇對(duì)應(yīng)的依賴,右鍵紅色部分選擇Exclude,然后選擇上面的reimport就可

    2024年02月13日
    瀏覽(20)
  • Maven項(xiàng)目中的依賴出現(xiàn)版本沖突,最終發(fā)現(xiàn)是對(duì)Dependency Scope理解有誤

    Maven項(xiàng)目中的依賴出現(xiàn)版本沖突,最終發(fā)現(xiàn)是對(duì)Dependency Scope理解有誤

    再來(lái)個(gè)文章目錄 本文記錄一下遇到maven依賴版本沖突后的排查過(guò)程說(shuō)明以及問(wèn)題原因說(shuō)明 下面還有投票,幫忙投個(gè)票?? 最近加入了 Apache Dubbo 開(kāi)源社區(qū),成為了一名Dubbo Contributor。在熟悉Dubbo中的各個(gè)RPC協(xié)議時(shí)根據(jù)官網(wǎng)提供的示例搭建了一個(gè)示例。在熟悉過(guò)后想看下谷歌提供

    2023年04月09日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包