maven依赖范围_Maven依赖范围
maven依賴范圍
介紹:
管理依賴關系是Maven的核心功能。 定義Maven依賴項時, scope屬性定義了該依賴項在不同的Maven生命周期階段(例如build,test和run)上的可見性。
依賴范圍限制了任何項目中依賴的傳遞性,從而影響了類路徑。 此外,Maven中有六個不同的可用依賴范圍。 在本教程中,我們將學習它們中的每一個。
傳遞依存關系:
Maven中的依賴關系可以是直接的也可以是傳遞的 。
直接依賴關系是我們明確定義POM文件的依賴關系:
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>另一方面, 傳遞依賴是直接依賴所要求的。 所需的傳遞依賴項自動包含在我們的maven項目類路徑中。
關鍵條款:
在深入學習可用的Maven范圍之前,讓我們首先使用一些關鍵術語來刷新我們的知識,
- compile-classpath :對我們項目的主要源文件具有依賴性
- test-classpath:保存測試編譯和執行期間存在的依賴項
- runtime-classpath :在運行時環境及其執行中將可用的依賴項
依賴范圍:
現在讓我們看一下不同的Maven依賴范圍:
除非另有說明,否則它是Maven中的默認范圍 。 對于主要的源代碼編譯,我們需要這些依賴項。 同樣,我們上面討論的所有三個類路徑中都提供了編譯依賴項。
這些依賴關系是可傳遞的,因此傳播到依賴項目。
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>范圍設置為test的依賴項僅在test-classpath中可用。 我們只需要這些依賴關系來編譯和運行單元測試用例。 而且,它不是可傳遞的。
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> </dependency>我們不需要運行時依賴來進行代碼編譯,但是非常需要它來在運行時執行代碼 。 這樣的依賴關系在編譯類路徑中不可用,但在測試類路徑和運行時類路徑中都存在。
一個很好的例子是JDBC驅動程序的依賴關系:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version><scope>runtime</scope> </dependency>它是可傳遞的。 因此,項目包裝包括所有傳遞依賴項。
提供的依賴項僅在compile-classpath和test-classpath中可用 。 假定運行時環境(如JDK ,Web或Servlet容器等)將在部署模式下提供依賴的JARS 。
<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope> </dependency>它本質上不是可傳遞的。 因此,打包后,我們將無法在我們的lib文件夾中找到此范圍的直接或傳遞依賴項。
系統范圍與提供的范圍非常相似。 在這里,唯一的區別是它是指本地系統中某個路徑的依賴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>使用此范圍的一個缺點是我們必須在執行之前在每個系統上進行手動設置。 這樣可以避免查找Maven本地存儲庫。 相反,它拿起在Systempath下提供的罐子 。 不出所料,此處沒有傳遞性。
導入依賴關系范圍是在Maven 2.0.9中首次引入的。 這對于基于多模塊Maven的項目很有用。 要使用它,我們需要在父POM中配置<dependencyManagement> 。 另外, 它僅受<dependencyManagement>部分中類型為pom的依賴項支持。
這個想法是為了能夠從其他項目中導入托管的依賴項。 因此,在我們的有效POM中 ,導入的依賴關系將替換為該項目中所有可用的有效依賴關系。
<dependencyManagement><dependencies><dependency><groupId>com.programmergirl</groupId><artifactId>my-project</artifactId><version>1.1</version><type>pom</type><scope>import</scope> </dependency></dependencies> </dependencyManagement>可傳遞性解析規則:
我們的主要打包項目不包括帶有范圍的項目依賴項- 提供和測試 。 之所以如此,是因為它們本質上是可傳遞的。 為了解決具有給定范圍的直接依賴項的傳遞性,我們具有以下規則:
- 編譯 –使用運行時引入可傳遞的依賴關系并編譯范圍,而不更改其范圍
- 測試 – 編譯和運行時傳遞依賴項都通過我們項目中的測試范圍引入
- 運行時 –使用項目中的運行時范圍提取編譯和運行時傳遞依賴項
- 提供 – 編譯范圍和運行時范圍的依賴關系都將通過提供的范圍引入
結論:
在本教程中,我們介紹了Maven中可用的所有六種依賴關系范圍。 我們還討論了基于Maven范圍的傳遞依賴及其解析。
成為第一個發表評論的人。
翻譯自: https://www.javacodegeeks.com/2019/05/maven-dependency-scopes.html
maven依賴范圍
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的maven依赖范围_Maven依赖范围的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软与Meta达成合作,将Bing搜索集
- 下一篇: 雅加达poi_雅加达EE:干净的板岩