Maven中使用 scope 來指定當(dāng)前包的依賴范圍和依賴的傳遞性。常見的可選值有:compile,provided,runtime,test, syste,import 等。scope 主要是用在 pom.xml 文件中的依賴定義部分,例如:
javax.servlet javax.servlet-api 4.0.1 provided
scope取值和作用表scope取值 | 有效范圍 | 依賴傳遞 | 是否打入jar包 | 例子 |
---|---|---|---|---|
compile | all | 是 | 是 | spring-core |
provided | compile,test | 否 | 否 | servlet-api |
system | compile,test | 是 | ||
runtime | runtime,test | 是 | 是 | JDBC驅(qū)動 |
test | test | 否 | 否 | JUnit |
import | 是 |
為默認(rèn)的依賴有效范圍。定義依賴關(guān)系沒有指定依賴有效范圍,默認(rèn)采用該依賴有效范圍;
此種依賴,在編譯、運(yùn)行、測試時均有效,會以依賴傳遞,打入jar包;
provided在編譯、測試時有效,但是在運(yùn)行時無效。provided意味著打包的時候不會打入jar包,別的設(shè)施(Web Container)會提供。
事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測試,運(yùn)行等周期。相當(dāng)于compile,但是在打包階段做了exclude的動作。
例如:servlet-api,運(yùn)行項(xiàng)目時,容器已經(jīng)提供,就不需要打入jar包了。
說到provided,這里就要說到 dependency 下的子標(biāo)簽 optional ,如果一個依賴的 optional 設(shè)置為true,則該依賴在打包的時候不會被打進(jìn)jar包,同時不會通過依賴傳遞傳遞到依賴該項(xiàng)目的工程;例如:x
依賴B,B由依賴于A(x->B->A),則A中設(shè)置 optional 為true的依賴不會被傳遞到x中。
兩者區(qū)別:
1、為true 表示某個依賴可選,該依賴是否使用都不會影響服務(wù)運(yùn)行;
2、provided的在目標(biāo)容器中已經(jīng)提供了這個依賴,無需在提供
systemsystem依賴不是由maven倉庫管理,而是本地的jar包,因此必須配合systemPath標(biāo)簽來指定本地的jar包所在全路徑。這類jar包默認(rèn)會參與編譯、測試,但是不會被參與打包階段。如果也想打包進(jìn)去的話,需要在插件里做配置true;
//引用本地jar包com.mytest test 1.0 system ${pom.basedir}/lib/test-1.0.jar
由于此類依賴不是通過Maven倉庫解析的,而且往往與本機(jī)系統(tǒng)綁定,可能造成構(gòu)建的不可移植,因此應(yīng)該謹(jǐn)慎使用。
runtime在運(yùn)行、測試時有效,但是在編譯代碼時無效,打入jar包;
例如:JDBC驅(qū)動實(shí)現(xiàn),項(xiàng)目代碼編譯只需要JDK提供的JDBC接口,只有在測試或運(yùn)行項(xiàng)目時才需要實(shí)現(xiàn)上述接口的具體JDBC驅(qū)動。
只在測試時有效,包括測試代碼的編譯,執(zhí)行,不會打入jar包;例如:JUnit。
importimport 只能在pom文件的
中使用,從而引入其他的pom文件中引入依賴;
如:在Spring boot 項(xiàng)目的POM文件中,我們可以通過在POM文件中繼承 Spring-boot-starter-parent來引
用Srping boot默認(rèn)依賴的jar包,如下:
org.springframework.boot spring-boot-starter-parent 2.0.1.BUILD-SNAPSHOT
但是,通過上面的parent繼承的方法,只能繼承一個 spring-boot-start-parent。實(shí)際開發(fā)中,用戶很可能需要繼承自己公司的標(biāo)準(zhǔn)parent配置,這個時候可以使用 scope=import 來實(shí)現(xiàn)多繼承。代碼如下:
org.springframework.boot spring-boot-dependencies 2.0.1.BUILD-SNAPSHOT pom import
通過上面方式,就可以獲取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT.pom文件中dependencyManagement配置的jar包依賴。如果要繼承多個,可以在dependencyManagement中添加,如:
org.springframework.data spring-data-releasetrain Fowler-SR2 pom import org.springframework.boot spring-boot-dependencies 2.0.1.BUILD-SNAPSHOT pom import
另外:【Maven】jar包沖突原因與最優(yōu)解決方案
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧