Maven依賴作用範圍

依賴管理

  1. 依賴配置

在maven中,是在pom.xml文件中完成依賴的配置的,我們先來看看依賴配置的語法。
在這裏插入圖片描述
乍一看,這個配置還是蠻複雜的,其實我們常用的沒有這麼多,而且這些用起來也是非常簡單的。在pom.xml文件中,根元素project下的dependencies標籤中可以包含一個或者多個dependency元素,以聲明一個或者多個項目依賴。每個依賴dependency標籤中都應該包含以下元素:
1、groupId:可以理解爲一個java的包名(名稱默認以公司域名倒寫),在對應的本地倉庫中,它是一個可以有很多層的目錄,並且以.來進行目錄分級。
2、artifactId:可以理解成項目或者模塊的名稱
3、version:表示項目或者模塊的版本
4、type:依賴的類型,對應於項目座標定義的Packaging,大部分情況下,該元素不必聲明,其默認值爲jar
5、scope:依賴的範圍,重點
6、optional:標記依賴是否可選
7、exclusions:用來排除傳遞性依賴。其中可配置多個exclusion標籤,每個exclusion標籤裏面對應的有groupId、artifactId、version三項基本元素

很多時候,大部分依賴聲明只包含groupId、artifactId和version這三個指定基本座標的元素;而在一些特殊情況下,其它元素至關重要,也就是上面提到的scope、optional和exclusions。

  1. 依賴範圍

依賴範圍是什麼?
我們需要知道,maven在編譯項目主代碼的時候需要使用一套classpath。舉例來說:
在這裏插入圖片描述
所以,依賴範圍就是用來控制依賴與這三種classpath(編譯classpath、測試classpath、運行classpath)的關係的。

依賴範圍具體有哪些?
scope(依賴範圍)共有五種,它們分別是compile、provided、runtime、test、system。

  • compile
    編譯依賴範圍。如果沒有指定scope值,那麼就會默認使用該依賴。使用該依賴範圍的maven依賴,對於編譯、測試、運行這三種classpath都有效
  • provided
    已提供依賴範圍。使用此依賴範圍的maven依賴,對於編譯和測試classpath有效,但在運行時無效。最典型的例子是servlet-api,編譯和測試項目的時候需要該依賴,但在運行項目的時候,由於tomcat容器已經提供,所以就不需要maven重複地引入一遍了。
  • runtime
    運行時依賴範圍。使用此依賴範圍的maven依賴,對於測試和運行classpath有效,但在編譯主代碼時無效。最典型的例子就是JDBC驅動實現,項目主代碼的編譯只需要JDK提供的JDBC接口,只有在執行測試或者運行項目的時候才需要實現上述接口的具體JDBC驅動。
  • test
    測試依賴範圍。使用此依賴範圍的maven依賴,只對於測試classpath有效,在編譯主代碼或者運行項目時都無法使用此依賴。最典型的例子就是JUnit,它只有在編譯測試代碼及運行測試用例的時候才需要。也就是說,在編譯和測試時是需要的,但在運行時不需要,因爲在測試的時候,我們是用來跑測試用例的,而將來把項目打成jar包或者war包,丟到服務器上去,還要跑測試用例嗎?肯定是不需要的。
  • system
    系統依賴範圍。該依賴與三種classpath的關係和provided依賴範圍完全一致。但是,使用system範圍的依賴時必須通過systemPath元素顯式地指定依賴文件的路徑。由於此類依賴不是通過maven倉庫解析的,而且往往與本機系統綁定,可能造成構建的不可移植,因此謹慎使用。system的使用例子如下:
    在這裏插入圖片描述

總結

爲了更好的理解和記憶依賴範圍與classpath的關係,可以將上述內容總結成一張表格。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章