網(wǎng)站建設(shè)圖文百度網(wǎng)頁網(wǎng)址
maven pom.xml 依賴的scope屬性
compile
適用范圍
編譯期、測試期、運行期
作用
? 從中央倉庫拉取依賴到本地,并編譯 打包到結(jié)果包中
runtime
適用范圍
測試期、運行期
作用
? runtime 用在 Class.forName(“com.mysql.jdbc.Driver”) 時,compile 編譯時不依賴,只有運行時才會依賴。
test
適用范圍
測試期
作用
? scope為test表示依賴項目僅僅參與測試相關(guān)的工作,包括測試代碼的編譯,執(zhí)行。比較典型的如junit
? test表示只能在src下的test文件夾下面才可以使用,你如果在a項目中引入了這個依賴,在b項目引入了a項目作為依賴,在b項目中這個注解不會生效,因為scope為test時無法傳遞依賴。
system
適用范圍
編譯期、測試期
作用
由于版權(quán)限制等原因,不是所有的jar包都存儲在中央倉庫中。scope取值為system時,表示依賴來自本地系統(tǒng),需要配合標(biāo)簽systemPath(用于指定依賴路徑)使用
provided
適用范圍
編譯期、測試期
作用
? provided表示已提供,即打包期間不需要該依賴,該依賴會由其他依賴或容器會提供,避免依賴沖突
? 案例一:lombok 只在編譯時,把 getter、setter 設(shè)置好,不需要運行時使用。
? 案例二:servlet-api 只在編譯時,需要引入,運行時由 tomcat 容器提供。
scope的依賴傳遞
A–>B–>C。當(dāng)前項目為A,A依賴于B,B依賴于C。知道B在A項目中的scope,那么怎么知道C在A中的scope呢?
? 當(dāng)C是test或者provided時,C直接被丟棄,A不依賴C;
否則A依賴C,C的scope繼承于B的scope。