1. 程式人生 > >maven依賴範圍和依賴傳遞

maven依賴範圍和依賴傳遞

compile (編譯範圍)

compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範圍。編譯範圍依賴在所有的classpath 中可用,同時它們也會被打包。

provided (已提供範圍)

provided 依賴只有在當JDK 或者一個容器已提供該依賴之後才使用。例如,如果你開發了一個web 應用,你可能在編譯 classpath 中需要可用的Servlet API 來編譯一個servlet,但是你不會想要在打包好的WAR 中包含這個Servlet API;這個Servlet API JAR 由你的應用伺服器或者servlet 容器提供。已提供範圍的依賴在編譯classpath

(不是執行時)可用。它們不是傳遞性的,也不會被打包。

runtime (執行時範圍)

runtime 依賴在執行和測試系統的時候需要,但在編譯的時候不需要。比如,你可能在編譯的時候只需要JDBC API JAR,而只有在執行的時候才需要JDBC
驅動實現。

test (測試範圍)

test範圍依賴在一般的編譯和執行時都不需要,它們只有在測試編譯和測試執行階段可用。

system (系統範圍)

system範圍依賴與provided 類似,但是你必須顯式的提供一個對於本地系統中JAR 檔案的路徑。這麼做是為了允許基於本地物件編譯,而這些物件是系統類庫的一部分。這樣的構件應該是一直可用的,Maven

也不會在倉庫中去尋找它。如果你將一個依賴範圍設定成系統範圍,你必須同時提供一個 systemPath 元素。注意該範圍是不推薦使用的(你應該一直儘量去從公共或定製的 Maven 倉庫中引用依賴)。

最左邊一行表示第一直接依賴範圍,最上面一行表示第二直接依賴範圍,中間的交叉單元格則表示傳遞性依賴範圍。
compile test provided runtime
compile compile --- --- runtime
test test --- --- test
provided provided --- provided provided
runtime runtime --- --- runtime
仔細觀察上面表格,我們發現這樣的規律:

  • 當第二直接依賴的範圍是compile的時候,傳遞性依賴的範圍與第一直接依賴的範圍一致
  • 當第二直接依賴的範圍是test的時候,依賴不會得以傳遞
  • 當第二直接依賴的範圍是provided的時候,只傳遞第一直接依賴的範圍也為provided的依賴,切傳遞性依賴的範圍同樣為provided
  • 當第二直接依賴的範圍是runtime的時候,傳遞性依賴的範圍與第一直接依賴的範圍一致,但compile例外,此時傳遞性依賴的範圍為runtime

相關推薦

maven依賴範圍依賴傳遞

compile (編譯範圍) compile是預設的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範圍。編譯範圍依賴在所有的classpath 中可用,同時它們也會被打包。 provided (已提供範圍) provided 依賴只有在當JDK 或者一個容器已提供該依賴

Maven依賴範圍依賴版本衝突的解決

一、依賴範圍1. Compile  struts2-core編譯(compile)時需要 測試時需要,,執行時需要,打包時需要2. Provided  jsp-api.jar   servlet-api

Maven入門實戰(二)——依賴新增、依賴範圍SpringMVC的結合

 上一節中我們介紹了Maven的作用以及相關的安裝配置方法和一個非常簡單的例項,接下來我們更近一步,為了加深對專案的影響,我們將結合SpringMVC進行Maven專案的實戰。 1 Maven的依賴新增  首先我們先建立一個Maven工程,建立方法同上一節中的方法,

Maven依賴範圍依賴傳遞

一: 依賴範圍scope 共5種,compile (編譯)、test (測試)、runtime (執行時)、provided、system 不指定,則依賴範圍預設為compile. compile:編譯依賴範圍,在編譯,測試,執行時都需要。 test: 測試依賴

Maven實戰-由一次jar包衝突來詳述 Maven 依賴範圍依賴調節原則

這篇文章的緣由是剛來搭建的專案有jar包衝突,報下面這個錯基本就是servlet-api包衝突無疑了 Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitia

(二)Maven的座標依賴&利用Maven實現郵件傳送

本文中將《Maven實戰》中對座標和依賴的定義展示給初學Maven的程式猿們,並加上書中例項展示,具體詳細請購買《Maven實戰》--許曉斌著,更加詳細的學習Maven。 座標詳解 groupld:定義當前Maven項口隸屬的實際項口。首先,Maven 專案和實際專案不一

Spring中的依賴查詢依賴注入

作者:[Grey](https://www.cnblogs.com/greyzeng/) 原文地址: [語雀](https://www.yuque.com/greyzeng/mnc4mc/oshvxb) [部落格園](https://www.cnblogs.com/greyzeng/p/14459565

maven生命周期依賴範圍

當前 mpi size all sso clean 同時 sdn def 轉載:http://blog.csdn.net/J080624/article/details/54692444 【1】什麽是依賴? 當 A jar 包用到了 B jar 包時,A就對B產生了依賴

Maven管理(依賴範圍,依賴傳遞,依賴衝突,依賴可選,依賴排除)

Maven管理: 1. 依賴範圍 maven的依賴範圍有4種, 分別是: compile: 對主程式碼有效,  對測試程式碼有效,  被打包執行時有效. test:         對主程式碼無效,  對測試程式碼有效,  被打包執行時無效.        provided

Maven依賴範圍

clas 推薦 temp 是你 沒有 spa 應用服務 let 運行 compile(編譯範圍) compile是默認的範圍;如果沒有提供一個範圍,那該依賴的範圍就是編譯範圍。編譯範圍依賴在所有的classpath中可用, 同時它們也會被打包。 provided(已提供

[Maven實戰](9)傳遞依賴

cin jar ace wid cti div track 手動 local 了解Spring的朋友都知道。創建一個Spring Framework項目都須要依賴什麽樣的Jar包。假設不使用Maven,那麽在項目中就須要手動下載相關的依賴。因為Spring Fr

Maven 可選的依賴依賴排除

聲明 str 列表 解決辦法 ear 傳遞 環境變量 ould pac 轉載自並發編程網 – ifeve.com本文鏈接地址: 《Maven官方指南》可選的依賴和依賴排除 簡介 這節主要討論了可選的依賴排除功能。這將幫助用戶理解它們是什麽,怎麽使用它們,它們是怎麽工作的,和

maven可選依賴(Optional Dependencies)依賴排除(Dependency Exclusions)

許可 mave manage spa 兩個 傳遞 方式 mis ont 我們知道,maven的依賴關系是有傳遞性的。如:A-->B,B-->C。但有時候,項目A可能不是必需依賴C,因此需要在項目A中排除對A的依賴。在maven的依賴管理中,有兩種方式可以對依賴關

Maven學習筆記四(坐標依賴

Maven學習筆記 坐標 什麽是坐標? 在平面幾何中坐標(x,y)可以標識平面中唯一的一點 Maven 坐標主要組成 groupId:定義當前 Maven 項目隸屬項目、組織 artifactId:定義實際項目中的一個模塊 version:定義當前項目的當前版本

maven依賴範圍

默認 http 有效 通過 junit 依賴範圍 解析 alt 容器 maven依賴範圍 1. compile : 編譯,測試,運行都有效,默認的選擇2. test : 測試有效,例如junit3. provided : 編譯,測試有效,例如 servlet ,運行時容器會

maven課程 專案管理利器-maven 3-7 maven依賴範圍 2星

本節主要講了maven的依賴範圍: 在pom.xml   dependency標籤的scope中。eclipse中有編譯的路徑,maven中有編譯,執行,測試的路徑。   1  scope為test,為測試路徑,多為junit jar包 2  scope為compile,

Maven依賴的scope的依賴範圍

在Maven中依賴的域有這幾個:import、provided、runtime、compile、system、test 1compile 的範圍 當依賴的scope為compile的時候,那麼當前這個依賴的包,會在編譯的時候將這個依賴加入進來

Maven官方指南》可選的依賴依賴排除

原文連結 簡介 這節主要討論了可選的依賴排除功能。這將幫助使用者理解它們是什麼,怎麼使用它們,它們是怎麼工作的,和使用它們的最好的方式。同樣也解釋了為什麼排除是在每個依賴的基礎上,而不是在POM級別。 可選的依賴 當不可能把一個專案分裂成子模組(不管什麼原因)的時候,我們可以使用可選的依賴。

用dependency:tree檢視maven引入jar包的傳遞依賴

maven專案的pom.xml檔案給專案匯入了不同的jar包,有時候不同的dependency會引入同一個jar包的不同版本。 當不同版本的jar包被依賴後,可能會出現: 衝突。有的版本的jar包不會被classloader引入,而有的程式碼確實需要那個沒有被引入的jar

Maven依賴範圍

1、compile 編譯(compile)時需要 測試時需要,,執行時需要,打包時需要   例子:   struts2-core   2、provided 編譯(compile)時需要,測試(test)時也需要 ,執行時不需要,打包時不需要   例子: