[Maven實戰](8)依賴配置與依賴范圍
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!