maven依赖范围_Maven依赖范围
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软与Meta达成合作,将Bing搜索集
- 下一篇: 雅加达poi_雅加达EE:干净的板岩