maven?scope?provided和runtime的例子說明
maven scope provided和runtime例子
maven常用的scope有compile,provided,runtime,test。
complie
是默認(rèn)值,表示在build,test,runtime階段的classpath下都有依賴關(guān)系。test
表示只在test階段有依賴關(guān)系,例如junitprovided
表示在build,test階段都有依賴,在runtime時(shí)并不輸出依賴關(guān)系而是由容器提供,例如web war包都不包括servlet-api.jar,而是由tomcat等容器來提供
<dependency> ? ? <groupId>javax.servlet</groupId> ? ? <artifactId>servlet-api</artifactId> ? ? <version>3.0.1</version> ? ? <scope>provided</scope> </dependency>
runtime
表示在構(gòu)建編譯階段不需要,只在test和runtime需要。
這種主要是指代碼里并沒有直接引用而是根據(jù)配置在運(yùn)行時(shí)動(dòng)態(tài)加載并實(shí)例化的情況。
雖然用runtime的地方改成compile也不會(huì)出大問題,但是runtime的好處是可以避免在程序里意外地直接引用到原本應(yīng)該動(dòng)態(tài)加載的包。
例如JDBC連接池
?? ??? ?<dependency> ?? ??? ??? ?<groupId>commons-dbcp</groupId> ?? ??? ??? ?<artifactId>commons-dbcp</artifactId> ?? ??? ??? ?<version>1.4</version> ?? ??? ??? ?<scope>runtime</scope> ?? ??? ?</dependency>
spring applicationContext.xml
?? ?<!-- mysql --> ?? ?<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ?? ??? ?<property name="dataSource"> ?? ??? ??? ?<ref bean="dataSource" /> ?? ??? ?</property> ?? ?</bean> ?? ?<!-- Connection Pool --> ?? ?<bean id="dataSource" destroy-method="close" ?? ??? ?class="org.apache.commons.dbcp.BasicDataSource"> ?? ??? ?<property name="driverClassName" value="${ckm.jdbc.driver}" /> ?? ??? ?<property name="url" value="${ckm.jdbc.url}" /> ?? ??? ?<property name="username" value="${ckm.jdbc.username}" /> ?? ??? ?<property name="password" value="${ckm.jdbc.password}" /> ?? ??? ?<property name="initialSize" value="6" /> ?? ?</bean>
maven依賴中scope的runtime和provied區(qū)別
<scope>runtime</scope>
runtime 用在 Class.forName(“com.mysql.jdbc.Driver”) 時(shí),compile 編譯時(shí)不依賴,只有運(yùn)行時(shí)才會(huì)依賴。
案例:當(dāng)嘗試去把 compile -> runtime 后,無法編譯成功,因?yàn)?runtime 只在運(yùn)行時(shí)使用,編譯時(shí)不引入,造成有些依賴無法加入。
<scope>provied</scope>
只有編譯會(huì)使用,程序運(yùn)行時(shí)不需要依賴的。
案例一:lombok 只在編譯時(shí),把 getter、setter 設(shè)置好,不需要運(yùn)行時(shí)使用。
案例二:servl
et-api 只在編譯時(shí),需要引入,運(yùn)行時(shí)由 tomcat 容器提供。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用jxl包寫Excel文件適合列寬實(shí)現(xiàn)
用jxl.jar包,讀寫過Excel文件。也沒有注意最適合列寬的問題,但是jxl.jar沒有提供最適合列寬的功能,上次用到寫了一下,可以基本實(shí)現(xiàn)最適合列寬。2013-11-11Java數(shù)據(jù)結(jié)構(gòu)之List的使用總結(jié)
List是Java中比較常用的集合類,指一系列存儲(chǔ)數(shù)據(jù)的接口和類,可以解決復(fù)雜的數(shù)據(jù)存儲(chǔ)問題,本文就來拿實(shí)際案例總結(jié)介紹一下List的使用方法,感興趣的朋友快來看看吧2021-11-11Java 多線程學(xué)習(xí)詳細(xì)總結(jié)
本文主要介紹 Java 多線程的知識(shí)資料,這里整理了詳細(xì)的多線程內(nèi)容,及簡單實(shí)現(xiàn)代碼,有需要的朋友可以參考下2016-09-09java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解
這篇文章主要介紹了java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11IDEA中沒有Mapper.xml模板選項(xiàng)的處理方法
這篇文章主要介紹了IDEA中沒有Mapper.xml模板選項(xiàng)的處理方法,需其實(shí)解決方法很簡單,只需要在idea中導(dǎo)入模板即可,本文圖文的形式給大家分享解決方法,需要的朋友可以參考下2021-04-04圖解Spring Security 中用戶是如何實(shí)現(xiàn)登錄的
這篇文章主要介紹了圖解Spring Security 中用戶是如何實(shí)現(xiàn)登錄的,文中通過示例代碼和圖片介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07在webservice里調(diào)用耗時(shí)方法出錯(cuò)的解決方案
這篇文章主要介紹了在webservice里調(diào)用耗時(shí)方法出錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07