maven?scope?provided和runtime的例子說明
maven scope provided和runtime例子
maven常用的scope有compile,provided,runtime,test。
complie是默認值,表示在build,test,runtime階段的classpath下都有依賴關(guān)系。test表示只在test階段有依賴關(guān)系,例如junitprovided表示在build,test階段都有依賴,在runtime時并不輸出依賴關(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ù)配置在運行時動態(tài)加載并實例化的情況。
雖然用runtime的地方改成compile也不會出大問題,但是runtime的好處是可以避免在程序里意外地直接引用到原本應(yī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”) 時,compile 編譯時不依賴,只有運行時才會依賴。
案例:當嘗試去把 compile -> runtime 后,無法編譯成功,因為 runtime 只在運行時使用,編譯時不引入,造成有些依賴無法加入。
<scope>provied</scope>
只有編譯會使用,程序運行時不需要依賴的。
案例一:lombok 只在編譯時,把 getter、setter 設(shè)置好,不需要運行時使用。

案例二:servl
et-api 只在編譯時,需要引入,運行時由 tomcat 容器提供。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用jxl包寫Excel文件適合列寬實現(xiàn)
用jxl.jar包,讀寫過Excel文件。也沒有注意最適合列寬的問題,但是jxl.jar沒有提供最適合列寬的功能,上次用到寫了一下,可以基本實現(xiàn)最適合列寬。2013-11-11
Java數(shù)據(jù)結(jié)構(gòu)之List的使用總結(jié)
List是Java中比較常用的集合類,指一系列存儲數(shù)據(jù)的接口和類,可以解決復(fù)雜的數(shù)據(jù)存儲問題,本文就來拿實際案例總結(jié)介紹一下List的使用方法,感興趣的朋友快來看看吧2021-11-11
java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解
這篇文章主要介紹了java.lang.Runtime.exec的左膀右臂:流輸入和流讀取詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
圖解Spring Security 中用戶是如何實現(xiàn)登錄的
這篇文章主要介紹了圖解Spring Security 中用戶是如何實現(xiàn)登錄的,文中通過示例代碼和圖片介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
在webservice里調(diào)用耗時方法出錯的解決方案
這篇文章主要介紹了在webservice里調(diào)用耗時方法出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

