国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

maven學(xué)習(xí)(四)

2019-11-15 00:21:46
字體:
供稿:網(wǎng)友
maven學(xué)習(xí)(四)

  昨天說道在eclipse中創(chuàng)建簡單的maven項目,今天來嘮嘮包的依賴范圍和依賴的傳遞。

  一、包的依賴范圍

<dependency>              <groupId>junit</groupId>              <artifactId>junit</artifactId>              <version>4.10</version>              <scope>test</scope>            </dependency>

  我們在添加一個JAR包的時候,dependency標(biāo)簽中會有一個scope標(biāo)簽,這個標(biāo)簽中的值表示的就是這個JAR包的依賴范圍,有6個可以填的值,分別是:compile、PRovided、runtime、test、system、import,它們各自的依賴范圍分別是:

  1.compile是默認的依賴范圍,表示在編譯或者打包時候都需要的JAR包。

  2.provided表示只有在編譯或者測試的時候需要,打包的時候是不需要的,例如servlet-api.jar,在tomcat的lib包中本就存在了,如果再在項目中打包一個,那么在tomcat上發(fā)布項目的時候勢必會出現(xiàn)重復(fù)、沖突。

  3.runtime 顧名思義就是運行時需要的JAR包了,例如數(shù)據(jù)庫的鏈接包,如果不跟數(shù)據(jù)庫打交道根本就不需要,所以這個在編譯是不需要的。

  4.test 這個更好理解了,測試的時候才需要的JAR包,例如junit、dbunit,都是測試的時候需要的,打包和編譯的時候不需要。

  5.system

      system范圍依賴與provided類似,但是你必須顯式的提供一個對于本地系統(tǒng)中JAR文件的路徑。這么做是為了允許基于本地對象編譯,而這些對象是系統(tǒng)類庫的一部分。這樣的構(gòu)件應(yīng)該是一直可用的,Maven也不會在倉庫中去尋找它。如果你將一個依賴范圍設(shè)置成系統(tǒng)范圍,你必須同時提供一個systemPath元素。注意該范圍是不推薦使用的(你應(yīng)該一直盡量去從公共或定制的Maven倉庫中引用依賴)

  至于import,我還不知道到底該怎么用,就不誤導(dǎo)大家了,如果有人知道,還請不吝賜教。

二.依賴傳遞

  依賴范圍說完了,下面說說依賴的傳遞,在maven項目中,依賴是可以傳遞的,但是也不是什么依賴都可以傳遞,如果依賴范圍是test,那么肯定不可以傳遞,其實可以傳遞的也就是compile罷了。

  1.同級別傳遞

    什么叫同級別傳遞呢?比如現(xiàn)在有現(xiàn)在有項目A依賴于某個JAR包,假設(shè)是J1.0,同時有項目B依賴于J2.0,項目C同時依賴于項目A和B,那么項目A和B都是直接依賴于名字是J的JAR包,項目屬于間接依賴于名字為J的JAR包,此時A和B就屬于同級別的。那么此時項目C中的JAR包的版本是哪個呢?

  結(jié)論:同級別的傳遞,先聲明哪個,傳遞的就是哪個。

  什么意思呢?意思就是如果在C項目中先聲明了A項目,那么C項目中依賴的就是J1.0,如果在C項目中先聲明的是B項目,那么C項目依賴的就是J2.0.舉個例子來說吧,下面看圖:

  現(xiàn)在有項目TestA,依賴的commons-logging-1.2.jar

  

  項目TestB,依賴的commons-logging-1.1.jar

  

  項目TestC同時依賴于TestA和TestB,并且先聲明了A

  

那么C中commons-logging的版本會是哪個呢?

  很明顯的是1.2版本,也就是A項目依賴的版本,反之,如果再C中先聲明了B,那么C中依賴的肯定就是1.1版本了。

2.不同級別的傳遞

  還是上面的三個項目作為例子,上面項目B的圖片可以看到項目B依賴了log4j-1.2.12.jar,但是在項目B的pom.xml中并沒有加入該包的依賴,但是項目B確實依賴了這個包,那么是怎么回事呢?

 通過項目B的依賴關(guān)系圖可以看到這個包是依賴于commons-logging 1.1.jar的,也就是項目B對于log4j是間接依賴。

下面我在項目C中加入了log4j的另一個版本。

項目C直接依賴于log4j 1.2.6.jar,同時C------->B--------->log4j 1.2.12.jar,那么在C中的log4j是哪個版本呢?

可以看到C依賴的是1.2.6版本的,也就是依賴層次短的。

結(jié)論:依賴級別不同的時候,依賴于層次最短的。

  3.排除依賴

 如果你不想使用某個人傳遞過來的jar包,那么你可以將這個版本排除掉,方法如下:

Ok!今天就這樣咯!!!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 通许县| 北碚区| 上蔡县| 青龙| 乌拉特前旗| 琼结县| 昭苏县| 郸城县| 石屏县| 陇南市| 莱西市| 石阡县| 凤阳县| 普定县| 韩城市| 紫云| 蒙阴县| 鞍山市| 肥东县| 广德县| 土默特右旗| 谢通门县| 林周县| 云龙县| 栾川县| 哈巴河县| 察隅县| 唐山市| 广南县| 汉寿县| 靖州| 南阳市| 达孜县| 隆昌县| 黔南| 夹江县| 辛集市| 江川县| 太和县| 菏泽市| 焉耆|