技術分享2018/11/2-Maven依賴作用範圍
阿新 • • 發佈:2018-11-26
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>