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

案例二:
servlet-api 只在編譯時,需要引入,運行時由 tomcat 容器提供。
maven scope provided和runtime的例子
maven常用的scope有compile,provided,runtime,test。
complie
是默認值,表示在build,test,runtime階段的classpath下都有依賴關(guān)系。
test
表示只在test階段有依賴關(guān)系,例如junit
provided
表示在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>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Cloud?Gateway?整合?knife4j?聚合接口文檔功能
這篇文章主要介紹了Spring?Cloud?Gateway?整合?knife4j?聚合接口文檔的相關(guān)知識,我們可以基于?Spring?Cloud?Gateway?網(wǎng)關(guān)?+?nacos?+?knife4j?對所有微服務(wù)項目的接口文檔進行聚合,從而實現(xiàn)我們想要的文檔管理功能,需要的朋友可以參考下2022-02-02
Java實現(xiàn)UDP通信過程實例分析【服務(wù)器端與客戶端】
這篇文章主要介紹了Java實現(xiàn)UDP通信過程,結(jié)合實例形式分析了java實現(xiàn)UDP服務(wù)器端與客戶端相關(guān)操作技巧與注意事項,需要的朋友可以參考下2020-05-05
java如何更改數(shù)據(jù)庫中的數(shù)據(jù)
這篇文章主要介紹了java如何更改數(shù)據(jù)庫中的數(shù)據(jù),修改數(shù)據(jù)庫是數(shù)據(jù)庫操作必不可少的一部分,使用Statement接口中的excuteUpdate()方法可以修改數(shù)據(jù)表中的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2021-11-11

