1. 程式人生 > >技術分享2018/11/2-Maven依賴作用範圍

技術分享2018/11/2-Maven依賴作用範圍

Maven 依賴作用範圍

scope 取值 有效範圍(compile,runtime,test) 依賴傳遞 舉例
test test JUnit
compile all spring-core
provided compile, test servlet-api
runtime runtime, test JDBC驅動
system compile, test

正如上表所示,

compile :預設的依賴有效範圍。如果在定義依賴關係的時候,沒有明確指定依賴有效範圍的話,則預設採用該依賴有效範圍。此種依賴,在編譯、執行、測試時均有效。

**provided :**在編譯、測試時有效,但是在執行時無效。例如:servlet-api,執行專案時,容器(Tomcat)已經提供,就不需要 Maven 重複地引入一遍了。

**runtime :**在執行、測試時有效,但是在編譯程式碼時無效。例如:JDBC 驅動實現,專案程式碼編譯只需要JDK提供的JDBC介面,只有在測試或執行專案時才需要實現上述介面的具體 JDBC 驅動。

**test :**只在測試時有效,例如:JUnit。

**system :**在編譯、測試時有效,但是在執行時無效。和 provided 的區別是,使用 system 範圍的依賴時必須通過 systemPath 元素顯式地指定依賴檔案的路徑。由於此類依賴不是通過 Maven 倉庫解析的,而且往往與本機系統繫結,可能造成構建的不可移植,因此應該謹慎使用。systemPath 元素可以引用環境變數。例如:

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