maven依賴的描述

maven的座標和依賴
  座標和依賴,主要涉及的就是pom文件的頭部和<dependencies>標籤部分
(1)pom文件的頭部
  這裏頭部不是指pom文件的開頭<project>標籤的屬性:web

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi = http://www.w3.org/2001/XMLSchema-instance
  xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/maven-v4_0_0.xsd">

 

  這裏的頭部指的是以下部分:spring

  <groupId>com.hex.web</groupId>
  <artifactId>web-model-</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

 

  其中,<groupId>標籤表面的是項目名稱,通常採用項目的名稱做爲<groupId>的值;<artifactId>標籤是項目底下的一個模塊;<version>標籤表示的是這個模塊的版本,SNAPSHOT譯爲快照,表示的實際上是一個不穩定版本;<packaging>標籤表示的是打包的類型,沒有這個標籤時默認是jar。這個頭部表示的便是一個maven項目的座標。
(2)<dependencies>標籤
  <dependencies>標籤下有多個<dependency>子標籤,每個<dependency>都是這個項目或者模塊的依賴,<dependency>標籤的子標籤以下: apache

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>2.5.6</version>
</dependency>

 

  每一個依賴中都有一個項目的座標,這個座標惟一肯定了一個項目。有些依賴可能會出現<scope>標籤,這個標籤表示的是依賴的生效範圍,默認全局有效。例如以下標籤:maven

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

 

  這個依賴表示,junit只會在項目的測試中有效,其餘時候是不會引入這個依賴的。 依賴範圍分類以下,
  compile:編譯依賴範圍,這是默認的依賴範圍,對編譯、測試、運行都有效;
  test:測試依賴範圍,只對測試classpath有效;
  provided:已提供依賴範圍,只在編譯和測試的時候有效,運行時無效;
  runtime:運行時依賴範圍,只在測試和運行classpath有效;
  system:系統依賴範圍,慎用!
  import:導入依賴範圍,不會對三種classpath產生實際影響。ide

傳遞依賴
  假設項目A依賴於項目B1和B2,項目B1依賴於項目C1,項目B2依賴於項目C2,那麼能夠說項目A傳遞依賴於C1,項目A傳遞依賴於C2。
(1)傳遞依賴的範圍
  例如:若是A在compile範圍依賴於B,B在compile範圍依賴於C,那麼A在compile範圍依賴於C
  傳遞依賴的範圍由第一直接依賴(A依賴於B)和第二直接依賴(B依賴於C)共同決定。
(2)傳遞依賴的版本問題
  例如:若是A依賴於B1和B2,B1依賴於C1,C1依賴於C(2.0),B2依賴於C(1.0),那麼A傳遞依賴於C,可是C的版本如何肯定?
  第一原則:路徑最短原則,A傳遞依賴於C的路徑長度分別爲3和2,按照原則應該選擇路徑長度爲2的C的版本,因此C的版本爲1.0
  第二原則:最早聲明原則,若是路徑相同,如上訴例子中,B1依賴於C(2.0),此時C的版本應該由pom文件中最早聲明的依賴肯定。
(3)排除依賴
  例如:A依賴於B,B依賴於C,則A傳遞依賴於C。可是,當咱們不像在項目A中引入C的依賴(傳遞也不要),那麼咱們須要在引入依賴B時,排除B中C的依賴。以下,咱們在A的pom文件中應該這樣寫:測試

<dependency>
  <groupId>com.B.project</groupId>
  <artifacted>project-b<//artifactId>
  <version>1.0.0</version>
  <exclusions>
    <exclusion>
      <groupId>com.C.project</groupId>
      <artifactId>project-c</artifactId>
    <exclusion>
  <exclusions>
</dependency>

 

  這樣,在引入對B的依賴時,就不會引入對C的依賴。若是咱們還不想引入B的依賴D,能夠在<exclusions>標籤下添加一個<exclusion>標籤描述D的座標。注意:此處的座標不包含<version>標籤,由於B中對C的依賴的版本是惟一的(不惟一時會按照兩個原則肯定惟一的)spa

相關文章
相關標籤/搜索