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

一篇文章帶你了解Maven的坐標(biāo)概念以及依賴管理

 更新時(shí)間:2022年01月23日 09:45:08   作者:YSOcean  
這篇文章主要為大家介紹了Maven的坐標(biāo)概念以及依賴管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

1、什么是坐標(biāo)?

①、數(shù)學(xué)中的坐標(biāo)

在平面上,使用 X 、Y 兩個(gè)向量可以唯一的定位平面中的任何一個(gè)點(diǎn)

在空間中,使用 X、Y、Z 三個(gè)向量可以唯一的定位空間中的任意一個(gè)點(diǎn)

②、Maven 中的坐標(biāo)

俗稱 gav:使用下面三個(gè)向量子倉(cāng)庫(kù)中唯一定位一個(gè) Maven 工程

在項(xiàng)目中的 pom.xml 文件中,我們可以看到下面gav的定義:

1、groupid:公司或組織域名倒序

<groupid>com.ys.maven</groupid>

2、artifactid:模塊名,也是實(shí)際項(xiàng)目的名稱

<artifactid>Maven_05</artifactid>    

3、version:當(dāng)前項(xiàng)目的版本      

<version>0.0.1-SNAPSHOT</version>

③、Maven 坐標(biāo)和倉(cāng)庫(kù),jar 包的關(guān)系

什么是倉(cāng)庫(kù),后面我們會(huì)詳細(xì)講解,現(xiàn)在你只需要知道是Maven 用來(lái)存放 jar 包的地方。

那么依照上面定義的 gav,我們執(zhí)行 mvn -install 命令,會(huì)出現(xiàn)什么情況呢?

首先進(jìn)入到我們第二篇博客 Maven 的安裝配置,通過(guò) settings.xml 文件配置的倉(cāng)庫(kù)目錄。

將我們上面配置的 gav 向量組合起來(lái)就是目錄:

com/ys/maven/Maven_05/0.0.1-SNAPSHOT/Maven_05-0.0.1-SNAPSHOT.jar

其次,我們觀察打出來(lái)的 jar 包:

Maven_05-0.0.1-SNAPSHOT.jar

也就是 artifactid-version.jar

2、什么是依賴?

什么是 依賴?相信有過(guò)一定開(kāi)發(fā)經(jīng)驗(yàn)的人知道,每當(dāng)我們需要使用某個(gè)框架時(shí),比如 SpringMVC,那么我們需要導(dǎo)入相應(yīng)的 jar 包,但是手動(dòng)導(dǎo)入包的時(shí)候,往往會(huì)漏掉幾個(gè) jar 包,那么在使用該框架的時(shí)候系統(tǒng)就會(huì)報(bào)錯(cuò)。那么我們就說(shuō)導(dǎo)入的包與未導(dǎo)入的包存在依賴關(guān)系。而使用 Maven,我們只需要在 pom.xml 文件中進(jìn)行相應(yīng)的配置,它就會(huì)幫助我們自動(dòng)管理 jar 包之間的依賴關(guān)系。那么它是怎么管理的呢,接下來(lái)我們會(huì)詳細(xì)講解。

3、依賴的詳細(xì)配置

我們以 Junit 為例,在 pom.xml 文件中進(jìn)行詳細(xì)而完整的配置?!?/p>

<project>     
    <dependencies>
        <dependency>
            <groupId>junit</groupId>     
            <artifactId>junit</artifactId>     
            <version>3.8.1</version>
            <type>...</type>
            <scope>...</scope>
            <optional>...</optional>
            <exclusions>     
                <exclusion>     
                  <groupId>...</groupId>     
                  <artifactId>...</artifactId>     
                </exclusion>
          </exclusions>     
        </dependency>        
      </dependencies>     
</project>

①、dependencies:一個(gè) pom.xml 文件中只能存在一個(gè)這樣的標(biāo)簽。用來(lái)管理依賴的總標(biāo)簽。

②、dependency:包含在dependencies標(biāo)簽中,可以有無(wú)數(shù)個(gè),每一個(gè)表示一個(gè)依賴

③、groupId,artifactIdversion:依賴的基本坐標(biāo),對(duì)于任何一個(gè)依賴來(lái)說(shuō),基本坐標(biāo)是最重要的,Maven根據(jù)坐標(biāo)才能找到需要的依賴。

④、type:依賴的類型,對(duì)應(yīng)于項(xiàng)目坐標(biāo)定義的packaging。大部分情況下,該元素不必聲明,其默認(rèn)值是jar。

⑤、scope:依賴的范圍,默認(rèn)值是 compile。后面會(huì)進(jìn)行詳解。

⑥、optional:標(biāo)記依賴是否可選。

⑦、exclusions:用來(lái)排除傳遞性依賴,后面會(huì)進(jìn)行詳細(xì)介紹。

4、依賴的范圍 scope

一般情況下,我們對(duì)前面三個(gè)依賴用的比較多。下面的主程序表示maven 目錄結(jié)構(gòu) src/main/java.測(cè)試程序目錄結(jié)構(gòu)為:src/test/java

1、compile 范圍依賴

對(duì)主程序是否有效:有效

對(duì)測(cè)試程序是否有效:有效

是否參與打包:參與

是否參與部署:參與

典型例子:log4j

2、test 范圍依賴

對(duì)主程序是否有效:無(wú)效

對(duì)測(cè)試程序是否有效:有效

是否參與打包:不參與

是否參與部署:不參與

典型例子:Junit

3、provided 范圍依賴

對(duì)主程序是否有效:有效

對(duì)測(cè)試程序是否有效:有效

是否參與打包:不參與

是否參與部署:不參與

典型例子:servlet-api.jar,一般在發(fā)布到 服務(wù)器中,比如 tomcat,服務(wù)器會(huì)自帶 servlet-api.jar 包,所以provided 范圍依賴只在編譯測(cè)試有效?!  ?/p>

4、runtime 范圍依賴:

在測(cè)試、運(yùn)行的時(shí)候依賴,在編譯的時(shí)候不依賴。例如:JDBC驅(qū)動(dòng),項(xiàng)目代碼只需要jdk提供的jdbc接口,只有在執(zhí)行測(cè)試和運(yùn)行項(xiàng)目的時(shí)候才需要實(shí)現(xiàn)jdbc的功能。  

接下來(lái)我們舉幾個(gè)例子在工程中實(shí)際去理解:

test 依賴和 compile 依賴的區(qū)別:

①、首先我們?cè)?pom.xml 文件中配置,Junit 的 test 依賴      

②、我們?cè)谥鞒绦蛑腥?dǎo)入 Junit 的包,然后進(jìn)行 mvn -compile 編譯,很明顯,test 范圍的在主程序中無(wú)效,故編譯會(huì)報(bào)錯(cuò)。

我們?cè)?code>src/main/java 包下新建 MavenTest.java,并導(dǎo)入 Junit 包

然后執(zhí)行 mvn -compile 操作,如下圖報(bào)錯(cuò)信息:

③、我們將 Junit 的依賴范圍改為 compile,然后執(zhí)行 mvn -compile

發(fā)現(xiàn) mvn -compile 沒(méi)有報(bào)錯(cuò)了。

5、依賴的傳遞

比如我們創(chuàng)建三個(gè)Maven 工程,maven-first,maven-second以及maven-third,而third依賴于second,second又依賴于first,那么我們說(shuō) second是 third 的第一直接依賴,first是second的第二直接依賴。而first是third的間接依賴。

依賴之間的傳遞如下圖:第一列表示第一直接依賴,第一行表示第二直接依賴

總結(jié):

1、當(dāng)?shù)诙蕾嚨姆秶莄ompile的時(shí)候,傳遞性依賴的范圍與第一直接依賴的范圍一致。
2、當(dāng)?shù)诙苯右蕾嚨姆秶莟est的時(shí)候,依賴不會(huì)得以傳遞。
3、當(dāng)?shù)诙蕾嚨姆秶莗rovided的時(shí)候,只傳遞第一直接依賴范圍也為provided的依賴,且傳遞性依賴的范圍同樣為 provided;
4、當(dāng)?shù)诙苯右蕾嚨姆秶莚untime的時(shí)候,傳遞性依賴的范圍與第一直接依賴的范圍一致,但compile例外,此時(shí)傳遞的依賴范圍為runtime;

我們這里舉個(gè)例子來(lái)看:

①、第二依賴范圍是 test

Maven_first pom.xml 文件如下:

然后Maven_second依賴Maven_fisrt,Maven_third依賴Maven-second,其pom.xml 文件如下:

Maven_second的 pom.xml

Maven_third的 pom.xml

我們發(fā)現(xiàn)在 Maven_third和 Maven_second 都沒(méi)有 Maven_first 引入的 Junit 包,正好符合上面總結(jié)的第二點(diǎn):當(dāng)?shù)诙苯右蕾嚨姆秶莟est的時(shí)候,依賴不會(huì)得以傳遞。

②、第二依賴范圍是 compile

如果我們將 Maven_first 的Junit 改為 compile,那么將會(huì)符合上面總結(jié)的第一點(diǎn):當(dāng)?shù)诙蕾嚨姆秶莄ompile的時(shí)候,傳遞性依賴的范圍與第一直接依賴的范圍一致。

6、依賴的排除

如果我們?cè)诋?dāng)前工程中引入了一個(gè)依賴是 A,而 A 又依賴了 B,那么 Maven 會(huì)自動(dòng)將 A 依賴的 B 引入當(dāng)前工程,但是個(gè)別情況下 B 有可能是一個(gè)不穩(wěn)定版,或?qū)Ξ?dāng)前工程有不良影響。這時(shí)我們可以在引入 A 的時(shí)候?qū)?B 排除。

比如:我們?cè)贛aven_first 中添加 spring-core,maven 會(huì)自動(dòng)將 commons-logging添加進(jìn)來(lái),那么由于Maven_second 是依賴 Maven_first 的,那么 Maven_second 中將存在 spring-core(自帶了commons-logging),這時(shí)候我們不想要 commons-logging,那該怎么辦呢?我們上面第二大點(diǎn)提到了:

exclusions:用來(lái)排除傳遞性依賴

Maven_first 的 pom.xml 文件

由于 Maven_second 依賴 Maven_second,故Maven_second 存在 spring-core

如何排除呢?我們?cè)?Maven_second 的 pom.xml 文件中添加如下代碼:

再次查看工程:Maven_secondcommons-logging 已經(jīng)移除了  

7、依賴的沖突

在maven中存在兩種沖突方式:一種是跨pom文件的沖突,一致是同一個(gè)pom文件中的沖突。

①、跨 pom 文件,路徑最短者優(yōu)先。比如我們?cè)?Maven_first 中的 Junit 是4.9版本的,Maven_second 中的 Junit 是4.8版本的,那么Maven_third 中的 Junit 將會(huì)是那個(gè)版本呢?

由上圖我們可以看出,由于 Maven_second 是 Maven_third 的直接依賴,明顯相比于 Maven_first 路徑要短,所以 Maven_third 的 Junit 版本與 Maven_second 保持一致。

②、同一個(gè)pom.xml 文件,先申明者優(yōu)先。

看 Maven_second

8、可選依賴

Optional標(biāo)簽標(biāo)示該依賴是否可選,默認(rèn)是false??梢岳斫鉃?,如果為true,則表示該依賴不會(huì)傳遞下去,如果為false,則會(huì)傳遞下去。

我們是在 Maven_second 的 pom 文件中設(shè)定 Junit 不可傳遞,那么Maven_third 工程中將不會(huì)有來(lái)自 Maven_second 的 Junit 的傳遞。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java中使用阻塞隊(duì)列控制線程集實(shí)例

    Java中使用阻塞隊(duì)列控制線程集實(shí)例

    這篇文章主要介紹了Java控制阻塞隊(duì)列線程集實(shí)例,本文用一個(gè)程序展示了如何使用阻塞隊(duì)列來(lái)控制線程集,程序功能是在一個(gè)目錄及它的所有子目錄下搜索所有文件,打印出包含指定關(guān)鍵字的文件列表,需要的朋友可以參考下
    2015-01-01
  • Java基礎(chǔ)之邏輯運(yùn)算符知識(shí)總結(jié)

    Java基礎(chǔ)之邏輯運(yùn)算符知識(shí)總結(jié)

    今天帶大家學(xué)習(xí)Java基礎(chǔ)知識(shí),文中對(duì)Java邏輯運(yùn)算符進(jìn)行了非常詳細(xì)的介紹,有相關(guān)代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java使用遞歸解決算法問(wèn)題的實(shí)例講解

    Java使用遞歸解決算法問(wèn)題的實(shí)例講解

    遞歸算法的實(shí)質(zhì)是把問(wèn)題分解成規(guī)??s小的同類問(wèn)題的子問(wèn)題,然后遞歸調(diào)用方法來(lái)表示問(wèn)題的解,這里我們就來(lái)看幾個(gè)Java使用遞歸解決算法問(wèn)題的實(shí)例講解
    2016-06-06
  • Java的WeakHashMap源碼解析及使用場(chǎng)景詳解

    Java的WeakHashMap源碼解析及使用場(chǎng)景詳解

    這篇文章主要介紹了Java的WeakHashMap源碼解析及使用場(chǎng)景詳解,Map本身生命周期很長(zhǎng),需要長(zhǎng)期貯留內(nèi)存中,但Map中的Entry可以刪除,使用時(shí)可以從其它地方再次取得,需要的朋友可以參考下
    2023-09-09
  • Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案

    Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案

    這篇文章主要介紹了Spring AOP之@Around,@AfterReturning使用、切不進(jìn)去的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java API操作HDFS方法詳細(xì)講解

    Java API操作HDFS方法詳細(xì)講解

    這篇文章主要介紹了Java API操作Hdfs詳細(xì)示例,遍歷當(dāng)前目錄下所有文件與文件夾,可以使用listStatus方法實(shí)現(xiàn)上述需求,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • SpringCloud服務(wù)的平滑上下線的方法

    SpringCloud服務(wù)的平滑上下線的方法

    這篇文章主要介紹了SpringCloud服務(wù)的平滑上下線的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • java向數(shù)據(jù)庫(kù)插入數(shù)據(jù)顯示亂碼的幾種問(wèn)題解決

    java向數(shù)據(jù)庫(kù)插入數(shù)據(jù)顯示亂碼的幾種問(wèn)題解決

    這篇文章主要給大家介紹了關(guān)于java向數(shù)據(jù)庫(kù)插入數(shù)據(jù)顯示亂碼問(wèn)題的解決方案,文章分別羅列了前臺(tái)亂碼的問(wèn)題、前臺(tái)先后臺(tái)插入數(shù)據(jù)后臺(tái)接收到的數(shù)據(jù)是亂碼以及后臺(tái)向數(shù)據(jù)庫(kù)插入數(shù)據(jù)是亂碼等幾種情況,需要的朋友可以參考下
    2021-11-11
  • Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載管理模塊實(shí)現(xiàn)(11)

    Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP上傳下載管理模塊實(shí)現(xiàn)(11)

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP本地文件管理模塊的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 簡(jiǎn)單了解SpringMVC常用組件作用解析

    簡(jiǎn)單了解SpringMVC常用組件作用解析

    這篇文章主要介紹了簡(jiǎn)單了解SpringMVC常用組件作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

德钦县| 辽中县| 兰坪| 玛沁县| 潼关县| 出国| 扎赉特旗| 辉南县| 武邑县| 铁岭县| 江西省| 兴和县| 镇远县| 辽阳市| 黄山市| 泸西县| 衢州市| 西安市| 广德县| 东兰县| 江都市| 富民县| 宁晋县| 寿光市| 常宁市| 东乡| 洞头县| 漳浦县| 恩施市| 台北市| 平度市| 罗田县| 黄龙县| 清苑县| 图木舒克市| 时尚| 精河县| 弥渡县| 江孜县| 浦城县| 三河市|