Maven依賴(lài)中scope的runtime和provied的區(qū)別及說(shuō)明
Maven依賴(lài)中scope的runtime和provied的區(qū)別
<scope>runtime</scope>
runtime 用在 Class.forName(“com.mysql.jdbc.Driver”) 時(shí),compile 編譯時(shí)不依賴(lài),只有運(yùn)行時(shí)才會(huì)依賴(lài)。
案例:
當(dāng)嘗試去把 compile -> runtime 后,無(wú)法編譯成功,因?yàn)?runtime 只在運(yùn)行時(shí)使用,編譯時(shí)不引入,造成有些依賴(lài)無(wú)法加入。
<scope>provied</scope>
只有編譯會(huì)使用,程序運(yùn)行時(shí)不需要依賴(lài)的。
案例一:
lombok 只在編譯時(shí),把 getter、setter 設(shè)置好,不需要運(yùn)行時(shí)使用。

案例二:
servlet-api 只在編譯時(shí),需要引入,運(yùn)行時(shí)由 tomcat 容器提供。
maven scope provided和runtime的例子
maven常用的scope有compile,provided,runtime,test。
complie
是默認(rèn)值,表示在build,test,runtime階段的classpath下都有依賴(lài)關(guān)系。
test
表示只在test階段有依賴(lài)關(guān)系,例如junit
provided
表示在build,test階段都有依賴(lài),在runtime時(shí)并不輸出依賴(lài)關(guān)系而是由容器提供,例如web war包都不包括servlet-api.jar,而是由tomcat等容器來(lái)提供
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>runtime
表示在構(gòu)建編譯階段不需要,只在test和runtime需要。
這種主要是指代碼里并沒(méi)有直接引用而是根據(jù)配置在運(yùn)行時(shí)動(dòng)態(tài)加載并實(shí)例化的情況。
雖然用runtime的地方改成compile也不會(huì)出大問(wèn)題,但是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>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea集成shell運(yùn)行環(huán)境以及shell輸出中文亂碼的解決
這篇文章主要介紹了idea集成shell運(yùn)行環(huán)境以及shell輸出中文亂碼的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Java常用類(lèi)String的面試題匯總(java面試題)
這篇文章主要介紹了Java常用類(lèi)String的面試題匯總,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
Java使用組件編寫(xiě)窗口實(shí)現(xiàn)網(wǎng)上文件下載
這篇文章主要為大家詳細(xì)介紹了Java使用組件編寫(xiě)窗口實(shí)現(xiàn)網(wǎng)上文件下載的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
如何通過(guò)Java實(shí)現(xiàn)PDF轉(zhuǎn)高質(zhì)量圖片
在Java中,將PDF文件轉(zhuǎn)換為高質(zhì)量的圖片可以使用不同的庫(kù),其中最常用的庫(kù)之一是?Apache?PDFBox,下面我們就來(lái)看看這個(gè)庫(kù)的具體使用吧2024-10-10
手?jǐn)]一個(gè)Spring?Boot?Starter并上傳到Maven中央倉(cāng)庫(kù)
本文主要介紹了手?jǐn)]一個(gè)Spring?Boot?Starter并上傳到Maven中央倉(cāng)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
Java使用動(dòng)態(tài)規(guī)劃算法思想解決背包問(wèn)題
背包問(wèn)題(Knapsack problem)是一種組合優(yōu)化的NP完全問(wèn)題。問(wèn)題可以描述為:給定一組物品,每種物品都有自己的重量和價(jià)格,在限定的總重量?jī)?nèi),我們?nèi)绾芜x擇,才能使得物品的總價(jià)格最高2022-04-04

