Maven pom.xml scope屬性的使用
Maven pom.xml scope屬性
在 Maven 中,scope
屬性用于定義依賴關(guān)系在不同生命周期階段的行為。
scope
會(huì)影響依賴關(guān)系在構(gòu)建過程中的哪些階段會(huì)被下載和使用,以及是否會(huì)傳遞到依賴于當(dāng)前項(xiàng)目的其他項(xiàng)目中。
理解 scope
的設(shè)置對(duì)于優(yōu)化構(gòu)建過程和管理依賴關(guān)系非常重要。
scope 的常見值及含義
Maven 支持以下幾種常見的 scope
值:
compile(默認(rèn))
- 對(duì)應(yīng)于整個(gè)構(gòu)建生命周期,表示這個(gè)依賴對(duì)編譯、測(cè)試和運(yùn)行都是可用的。
- 會(huì)被包含在最終的打包中。
- 會(huì)傳遞給依賴當(dāng)前項(xiàng)目的其他項(xiàng)目。
provided
- 類似于
compile
,但是它假定在運(yùn)行時(shí)會(huì)由容器或類路徑中的其他方式提供。 - 一般用于那些由容器提供的類庫(kù),如 Servlet 容器提供的 JAR 文件。
- 不會(huì)被包含在最終的打包中。
- 不會(huì)傳遞給依賴當(dāng)前項(xiàng)目的其他項(xiàng)目。
runtime
- 表示這個(gè)依賴在運(yùn)行和測(cè)試階段是需要的,但在編譯階段不需要。
- 會(huì)被包含在最終的打包中。
- 會(huì)傳遞給依賴當(dāng)前項(xiàng)目的其他項(xiàng)目。
test
- 表示這個(gè)依賴僅在測(cè)試編譯和測(cè)試運(yùn)行階段是需要的。
- 不會(huì)被包含在最終的打包中。
- 不會(huì)傳遞給依賴當(dāng)前項(xiàng)目的其他項(xiàng)目。
system
- 類似于
provided
,但是需要顯式地提供一個(gè)本地路徑到 JAR 文件。 - 已經(jīng)很少使用,通常不推薦使用。
示例解釋
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients</artifactId> <version>${flink.version}</version> <scope>provided</scope> </dependency>
在這個(gè)示例中:
groupId
是org.apache.flink
,表示依賴的組織或庫(kù)。artifactId
是flink-clients
,表示具體依賴的庫(kù)或模塊。version
是${flink.version}
,表示依賴的版本,這里使用了一個(gè)屬性${flink.version}
,該屬性需要在 POM 文件的其他地方定義。scope
是provided
,表示這個(gè)依賴假定在運(yùn)行時(shí)會(huì)被容器或其他方式提供。
使用場(chǎng)景
- 當(dāng)你開發(fā)的應(yīng)用程序運(yùn)行在一個(gè)容器環(huán)境中(如 Tomcat、Jetty 等),而該容器已經(jīng)提供了某些類庫(kù)(如 JSP API、Servlet API 等),這時(shí)就可以將這些類庫(kù)的依賴設(shè)置為
provided
。 - 如果你開發(fā)的應(yīng)用程序運(yùn)行在一個(gè)已經(jīng)包含了 Flink 客戶端的環(huán)境中,比如 Flink 集群本身,那么可以將
flink-clients
設(shè)置為provided
。
注意事項(xiàng)
- 使用
provided
時(shí),需要確保運(yùn)行時(shí)的確有相應(yīng)的類庫(kù)可用,否則應(yīng)用程序會(huì)因?yàn)檎也坏奖匾念惗鴴伋?ClassNotFoundException
。 - 如果你不確定運(yùn)行時(shí)環(huán)境是否會(huì)提供這些類庫(kù),或者這些類庫(kù)在不同的環(huán)境中可能不一致,那么最好不要使用
provided
,而使用compile
或runtime
。 provided
適用于那些由運(yùn)行時(shí)環(huán)境提供的類庫(kù),可以減少最終打包的大小,同時(shí)也減少了傳遞依賴的風(fēng)險(xiǎn)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java讀取文件顯示進(jìn)度條的實(shí)現(xiàn)方法
當(dāng)讀取一個(gè)大文件時(shí),一時(shí)半會(huì)兒無法看到讀取結(jié)果,就需要顯示一個(gè)進(jìn)度條,是程序員明白已經(jīng)讀了多少文件,可以估算讀取還需要多少時(shí)間,下面的代碼可以實(shí)現(xiàn)這個(gè)功能2014-01-01Springboot項(xiàng)目刪除項(xiàng)目同步target文件問題解決方案
這篇文章主要介紹了Springboot項(xiàng)目刪除項(xiàng)目同步target文件問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12SpringData整合ElasticSearch實(shí)現(xiàn)CRUD的示例代碼(超詳細(xì))
本文主要介紹了SpringData整合ElasticSearch實(shí)現(xiàn)CRUD的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SpringBoot整合HTTPS的項(xiàng)目實(shí)踐
HTTPS的主要作用是通過SSL證書保護(hù)用戶數(shù)據(jù)的安全與隱私,增加網(wǎng)站信任度,防止數(shù)據(jù)被竊取和篡改,保護(hù)網(wǎng)站免受釣魚攻擊,本文就來介紹一下,感興趣的可以了解一下2024-10-10Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法
這篇文章主要介紹了Java實(shí)現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計(jì)并輸出每個(gè)單詞出現(xiàn)次數(shù)的方法,涉及java文件I/O操作及字符串遍歷、運(yùn)算實(shí)現(xiàn)統(tǒng)計(jì)功能相關(guān)技巧,需要的朋友可以參考下2017-07-07