日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven依赖范围_Maven依赖范围

發(fā)布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven依赖范围_Maven依赖范围 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

maven依賴范圍

介紹:

管理依賴關(guān)系是Maven的核心功能。 定義Maven依賴項時, scope屬性定義了該依賴項在不同的Maven生命周期階段(例如build,test和run)上的可見性。

依賴范圍限制了任何項目中依賴的傳遞性,從而影響了類路徑。 此外,Maven中有六個不同的可用依賴范圍。 在本教程中,我們將學(xué)習(xí)它們中的每一個。

傳遞依存關(guān)系:

Maven中的依賴關(guān)系可以是直接的也可以是傳遞的 。

直接依賴關(guān)系是我們明確定義POM文件的依賴關(guān)系:

<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>

另一方面, 傳遞依賴是直接依賴所要求的。 所需的傳遞依賴項自動包含在我們的maven項目類路徑中。

關(guān)鍵條款:

在深入學(xué)習(xí)可用的Maven范圍之前,讓我們首先使用一些關(guān)鍵術(shù)語來刷新我們的知識,

  • compile-classpath :對我們項目的主要源文件具有依賴性
  • test-classpath:保存測試編譯和執(zhí)行期間存在的依賴項
  • runtime-classpath :在運行時環(huán)境及其執(zhí)行中將可用的依賴項

依賴范圍:

現(xiàn)在讓我們看一下不同的Maven依賴范圍:

除非另有說明,否則它是Maven中默認(rèn)范圍 。 對于主要的源代碼編譯,我們需要這些依賴項 同樣,我們上面討論的所有三個類路徑中都提供了編譯依賴項。

這些依賴關(guān)系是可傳遞的,因此傳播到依賴項目。

<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>

范圍設(shè)置為test的依賴項僅在test-classpath中可用。 我們只需要這些依賴關(guān)系來編譯和運行單元測試用例。 而且,它不是可傳遞的。

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> </dependency>

我們不需要運行時依賴來進行代碼編譯,但是非常需要它來在運行時執(zhí)行代碼 。 這樣的依賴關(guān)系在編譯類路徑中不可用,但在測試類路徑和運行時類路徑中都存在。

一個很好的例子是JDBC驅(qū)動程序的依賴關(guān)系:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version><scope>runtime</scope> </dependency>

它是可傳遞的。 因此,項目包裝包括所有傳遞依賴項。

提供的依賴項僅在compile-classpath和test-classpath中可用 。 假定運行時環(huán)境(如JDK ,Web或Servlet容器等)將在部署模式下提供依賴的JARS 。

<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope> </dependency>

它本質(zhì)上不是可傳遞的。 因此,打包后,我們將無法在我們的lib文件夾中找到此范圍的直接或傳遞依賴項。

系統(tǒng)范圍與提供的范圍非常相似。 在這里,唯一的區(qū)別是它是指本地系統(tǒng)中某個路徑的依賴jar 。

<dependency><groupId>com.programmergirl</groupId><artifactId>my-dependency</artifactId><version>2.5.1</version><scope>system</scope><systemPath>${project.basedir}/libs/my-dependency-2.5.1.jar</systemPath> </dependency>

使用此范圍的一個缺點是我們必須在執(zhí)行之前在每個系統(tǒng)上進行手動設(shè)置。 這樣可以避免查找Maven本地存儲庫。 相反,它拿起在Systempath下提供的罐子 。 不出所料,此處沒有傳遞性。

導(dǎo)入依賴關(guān)系范圍是在Maven 2.0.9中首次引入的。 這對于基于多模塊Maven的項目很有用。 要使用它,我們需要在父POM中配置<dependencyManagement> 。 另外, 它僅受<dependencyManagement>部分中類型為pom的依賴項支持。

這個想法是為了能夠從其他項目中導(dǎo)入托管的依賴項。 因此,在我們的有效POM中 ,導(dǎo)入的依賴關(guān)系將替換為該項目中所有可用的有效依賴關(guān)系。

<dependencyManagement><dependencies><dependency><groupId>com.programmergirl</groupId><artifactId>my-project</artifactId><version>1.1</version><type>pom</type><scope>import</scope> </dependency></dependencies> </dependencyManagement>

可傳遞性解析規(guī)則:

我們的主要打包項目不包括帶有范圍的項目依賴項- 提供和測試 。 之所以如此,是因為它們本質(zhì)上是可傳遞的。 為了解決具有給定范圍的直接依賴項的傳遞性,我們具有以下規(guī)則:

  • 編譯 –使用運行時引入可傳遞的依賴關(guān)系并編譯范圍,而不更改其范圍
  • 測試 – 編譯和運行時傳遞依賴項都通過我們項目中的測試范圍引入
  • 運行時 –使用項目中的運行時范圍提取編譯和運行時傳遞依賴項
  • 提供 – 編譯范圍和運行時范圍的依賴關(guān)系都將通過提供的范圍引入

結(jié)論:

在本教程中,我們介紹了Maven中可用的所有六種依賴關(guān)系范圍。 我們還討論了基于Maven范圍的傳遞依賴及其解析。

成為第一個發(fā)表評論的人。

翻譯自: https://www.javacodegeeks.com/2019/05/maven-dependency-scopes.html

maven依賴范圍

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的maven依赖范围_Maven依赖范围的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。