1.Maven中的依賴作用范圍概述
Maven中使用 scope
來指定當(dāng)前包的依賴范圍和依賴的傳遞性磨隘。常見的可選值有:compile, provided, runtime, test, system 等蝶锋。scope
主要是用在 pom.xml
文件中的依賴定義部分留储,例如:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.1.RELEASE</version>
<scope>test</scope>
</dependency>
2.scope各種取值詳解
scope取值 | 有效范圍(compile, runtime, test) | 依賴傳遞 | 例子 |
---|---|---|---|
compile | all | 是 | spring-core |
provided | compile, test | 否 | servlet-api |
runtime | runtime, test | 是 | JDBC驅(qū)動(dòng) |
test | test | 否 | JUnit |
system | compile, test | 是 |
正如上表所示割择,
compile :為默認(rèn)的依賴有效范圍。如果在定義依賴關(guān)系的時(shí)候探赫,沒有明確指定依賴有效范圍的話厦画,則默認(rèn)采用該依賴有效范圍。此種依賴擎浴,在編譯员咽、運(yùn)行、測試時(shí)均有效贮预。
provided :在編譯贝室、測試時(shí)有效,但是在運(yùn)行時(shí)無效仿吞。例如:servlet-api滑频,運(yùn)行項(xiàng)目時(shí),容器已經(jīng)提供唤冈,就不需要Maven重復(fù)地引入一遍了峡迷。
runtime :在運(yùn)行、測試時(shí)有效你虹,但是在編譯代碼時(shí)無效凉当。例如:JDBC驅(qū)動(dòng)實(shí)現(xiàn),項(xiàng)目代碼編譯只需要JDK提供的JDBC接口售葡,只有在測試或運(yùn)行項(xiàng)目時(shí)才需要實(shí)現(xiàn)上述接口的具體JDBC驅(qū)動(dòng)看杭。
test :只在測試時(shí)有效,例如:JUnit挟伙。
system :在編譯楼雹、測試時(shí)有效模孩,但是在運(yùn)行時(shí)無效。和provided的區(qū)別是贮缅,使用system范圍的依賴時(shí)必須通過systemPath元素顯式地指定依賴文件的路徑榨咐。由于此類依賴不是通過Maven倉庫解析的,而且往往與本機(jī)系統(tǒng)綁定谴供,可能造成構(gòu)建的不可移植块茁,因此應(yīng)該謹(jǐn)慎使用。systemPath元素可以引用環(huán)境變量桂肌。例如:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>