maven scope 属性和生命周期
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
maven的dependency參數(shù)
scope的分類
1.compile:默認(rèn)值 他表示被依賴項(xiàng)目需要參與當(dāng)前項(xiàng)目的編譯,還有后續(xù)的測(cè)試,運(yùn)行周期也參與其中,是一個(gè)比較強(qiáng)的依賴。打包的時(shí)候通常需要包含進(jìn)去
2.test:依賴項(xiàng)目?jī)H僅參與測(cè)試相關(guān)的工作,包括測(cè)試代碼的編譯和執(zhí)行,不會(huì)被打包,例如:junit
3.runtime:表示被依賴項(xiàng)目無(wú)需參與項(xiàng)目的編譯,不過(guò)后期的測(cè)試和運(yùn)行周期需要其參與。與compile相比,跳過(guò)了編譯而已。例如JDBC驅(qū)動(dòng),適用運(yùn)行和測(cè)試階段
4.provided:打包的時(shí)候可以不用包進(jìn)去,別的設(shè)施會(huì)提供。事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測(cè)試,運(yùn)行等周期。相當(dāng)于compile,但是打包階段做了exclude操作
5.system:從參與度來(lái)說(shuō),和provided相同,不過(guò)被依賴項(xiàng)不會(huì)從maven倉(cāng)庫(kù)下載,而是從本地文件系統(tǒng)拿。需要添加systemPath的屬性來(lái)定義路徑
6.import(only available in Maven 2.0.9 or later):這個(gè)是maven2.0.9版本后出的屬性,import只能在dependencyManagement的中使用,能解決maven單繼承問(wèn)題,import依賴關(guān)系實(shí)際上并不參與限制依賴關(guān)系的傳遞性。
使用import scope解決maven繼承(單)問(wèn)題
scope的依賴傳遞
A依賴B,B依賴C。當(dāng)前項(xiàng)目為A,只當(dāng)B在A項(xiàng)目中的scope,那么c在A中的scope是如何得知呢?
當(dāng)C是test或者provided時(shí),C直接被丟棄,A不依賴C;(排除傳遞依賴)
否則A依賴C,C的scope繼承與B的scope
Maven的生命周期
clean:有問(wèn)題,多清理! package:打成Jar or War包,會(huì)自動(dòng)進(jìn)行clean+compile install:將本地工程Jar上傳到本地倉(cāng)庫(kù) deploy:上傳到私服關(guān)于scope依賴范圍
既然,Maven的生命周期存在編譯、測(cè)試、運(yùn)行這些過(guò)程,那么顯然有些依賴只用于測(cè)試,比如junit;有些依賴編譯用不到,只有運(yùn)行的時(shí)候才能用到,比如mysql的驅(qū)動(dòng)包在編譯期就用不到(編譯期用的是JDBC接口),而是在運(yùn)行時(shí)用到的;還有些依賴,編譯期要用到,而運(yùn)行期不需要提供,因?yàn)橛行┤萜饕呀?jīng)提供了,比如servlet-api在tomcat中已經(jīng)提供了,我們只需要的是編譯期提供而已。
compile:默認(rèn)的scope,運(yùn)行期有效,需要打入包中。 provided:編譯期有效,運(yùn)行期不需要提供,不會(huì)打入包中。 runtime:編譯不需要,在運(yùn)行期有效,需要導(dǎo)入包中。(接口與實(shí)現(xiàn)分離) test:測(cè)試需要,不會(huì)打入包中。 system:非本地倉(cāng)庫(kù)引入、存在系統(tǒng)的某個(gè)路徑下的jar。(一般不使用)?
轉(zhuǎn)載于:https://my.oschina.net/u/3098425/blog/2870317
總結(jié)
以上是生活随笔為你收集整理的maven scope 属性和生命周期的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 精读《REST,GraphQL,Webh
- 下一篇: SpringBoot(七)整合theme