[Maven實戰](8)依賴配置與依賴范圍

jopen 8年前發布 | 21K 次閱讀
 1. 依賴配置

 依賴基本配置:
  
<project>
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>

  我們之前就遇到了依賴的概念,項目中測試需要依賴junit jar包,依賴配置如下:
   
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>

根元素下project下的dependencies可以包含一個或者多個dependency元素,以聲明一個或者多個項目依賴。每個依賴可以包含的元素有:
 
  • groupId,artifactId和version:依賴的基本坐標,對于任何一個依賴來說,基本坐標是最重要的,Maven根據坐標才能找到需要的依賴。
  • type:依賴的類型,對應于項目坐標定義的packaging。大部分情況下,該元素不必聲明,其默認值是jar。
  • scope:依賴的范圍,下面會進行詳解。
  • optional:標記依賴是否可選。
  • exclusions:用來排除傳遞性依賴,后面文章會詳細介紹。


2. 依賴范圍

下面主要講解一下依賴范圍的知識:

Maven在 編譯主代碼的時候需要使用一套 classpath,在 編譯和執行測試的時候會使用另一套 classpath,實際 運行項目的時候,又會使用一套 classpath

依賴范圍就是用來控制 依賴與這三種 classpath編譯classpath、測試classpath、運行classpath)的關系,Maven有以下幾種依賴范圍:
 
  • compile:編譯依賴范圍。如果沒有指定,就會默認使用該依賴范圍。使用此依賴范圍的Maven依賴,對于編譯、測試、運行三種classpath都有效。典型的例子是spring-core,在編譯,測試和運行的時候都需要使用該依賴。
  • provided:已提供依賴范圍。使用此依賴范圍的Maven依賴,對于編譯和測試classpath有效,但在運行時無效。典型的例子是servlet-api,編譯和測試項目的時候需要該依賴,但在運行項目的時候,由于容器已經提供,就不需要Maven重復地引入一遍。
  • test:測試依賴范圍。使用此依賴范圍的Maven依賴,只對于測試classpath有效,在編譯主代碼或者運行項目的使用時將無法使用此類依賴。典型的例子就是JUnit,它只有在編譯測試代碼及運行測試的時候才需要。
  • runtime:運行時依賴范圍。使用此依賴范圍的Maven依賴,對于測試和運行classpath有效,但在編譯主代碼時無效。典型的例子是JDBC驅動實現,項目主代碼的編譯只需要JDK提供的JDBC接口,只有在執行測試或者運行項目的時候才需要實現上述接口的具體JDBC驅動。
  • system:系統依賴范圍。該依賴范圍與provided所表示的依賴范圍一致,對于編譯和測試classpath有效,但在運行時無效。只是使用system范圍依賴時必須通過systemPath元素顯式地指定依賴文件的路徑。由于此類依賴不是通過Maven倉庫解析的,而且往往與本機系統綁定,可能造成構建的不可移植,因此應該謹慎使用,systemPath元素可以引用環境變量。舉個例子如下:

   
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope></scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>

  • import(Maven 2.0.9及以上):導入依賴范圍。該依賴范圍不會對三種classpath產生實際的影響。

上述除import以外的各種依賴范圍與三種classpath的關系如下:
依賴范圍(scope) 測試classpath 編譯classpath 運行classpath 例子
compile Y Y Y spring-core
provided Y Y   servlet-api
test Y     junit
runtime Y   Y JDBC驅動實現
system Y Y   本地的,Maven倉庫之外的類庫文件


</div> </div>




來源于:《Maven實戰》



來自: http://blog.csdn.net/sunnyyoona/article/details/50609297

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!