Maven依賴詳解
一、依賴
依賴是Maven 中最關鍵的部分,我們之所以在工程中使用Maven,就是因為它的依賴管理功能。如果我們想要在工程中引入某個jar 包,只需要在pom.xml
中引入其jar 包的座標即可。比如引入log4j 的依賴:
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version >
<scope>compile</scope>
</dependency>
</dependencies>
Maven 通過groupId
、artifactId
與version
三個向量來定位Maven 倉庫其jar 包所在的位置,並把對應的jar 包引入到工程中來。
二、依賴範圍
在引入log4j 依賴的時候,有一個scope
設定,這個scope
設定的值就是對應的依賴範圍(因為compile
是預設的依賴範圍,所以有時也可以省略)。
Maven 提供了六種依賴的範圍:compile
、test
provided
、runtime
、system
和import
。其中compile
是預設的依賴範圍。這裡主要對比前三種常用的依賴範圍。
type | 對主程式是否有效 | 對測試程式是否有效 | 是否參與打包與部署 | 典型例子 |
---|---|---|---|---|
compile | Y | Y | Y | log4j |
test | N | Y | N | junit |
provided | Y | Y | N | servlet-api |
需要注意的是:provided
範圍依賴是不參與專案打包與部署的,比如 servlet-api,如果你把scope
改成compile 範圍的依賴,就會因為jar 包衝突報錯。原因是我們在啟動web 專案時,tomcat 已經在啟動時載入了自身的 servlet-api。
三、依賴的傳遞性
依賴的傳遞性是指:在A 中新增對B 的依賴,在B 中新增對C 的依賴,如果依賴範圍是compile
的,A 不僅會有B 的jar 包,也會有C 的jar 包。如果在C 中添加了某個依賴,那麼根據傳遞性,A 和B 也可以使用A 新增的依賴,而不需要自己再重新引入依賴。
四、依賴的原則
最短路徑優先原則:如果A 依賴於B,B 依賴於C,在B 和C 中同時有log4j 的依賴,並且這兩個版本不一致,那麼A 會根據最短路徑原則,在A 中會傳遞過來B 的log4j版本。
路徑相同先宣告原則:如果在A 同時依賴於B 和C,B 和C 沒有依賴關係,並且都有log4j 的依賴,且版本不一致,那麼A 會引入在pom.xml
中先宣告依賴的log4j 版本。
五、依賴的排除
我們在當前工程中引入了A 的依賴,而A 同時有對B 的依賴,根據傳遞性我們知道,在當前工程中會自動引入對B 的依賴。其中B 可能是一個不穩定的版本,或者對當前的工程存在著不良的影響 。這時我們就可以在引入對A 依賴的同時排除對B 的依賴。
下面我們以spriing-core 為例,當我們在pom.xml
中引入對spriing-core 的同時,會自動將commons-logging 的jar 包引入進來。如下所示:
假設這個commons-logging 是一個不穩定的版本(只是假設),我們希望在引入spriing-core 時排除commons-logging。這時我們可以使用exclusion
來進行排除。
六、總結
在使用Maven 時,可能我們只是簡單知道Maven 的用法,從而忽略了其中的一些細節。希望這篇博文能夠為初步瞭解Maven 或只會簡單使用Maven 的人提供幫助。
相關推薦
elasticSearch+spring 整合 maven依賴詳解
elastics tail -s clas 1.0 too group nbsp snapshot 摘自:http://www.mayou18.com/detail/nTxPQSyu.html 【Elasticsearch基礎】elasticSearch+spring 整合
Maven依賴詳解
一、依賴 依賴是Maven 中最關鍵的部分,我們之所以在工程中使用Maven,就是因為它的依賴管理功能。如果我們想要在工程中引入某個jar 包,只需要在pom.xml 中引入其jar 包的座標即可。比如引入log4j 的依賴: <depen
數據庫學習筆記_10_函數依賴詳解——函數依賴公理及其推得規律和屬性閉包
一個 說明 tro ans while 比較 接下來 子集 and 首先引入armstrong‘s axioms, 反射律(reflexivity rule)對於任何為LA(a)子集的LA(b)來說,LA(a)->LA(b)恒成立 增加律(argu
Eclipse匯入Maven專案詳解
點選選單中File → Import 或者 右鍵左側空白區域,在彈出的選單中,選擇Import。 在彈出的Import視窗中: 選擇Maven 下的 Existing Maven Projects&
Maven座標詳解。
Maven座標為各種構件引入了秩序,任何一個構件都必須明確定義自己的座標,而一組Maven座標是通過一些元素定義的,他們是groupId、artifactId、version、packaging、classifier。先看一組座標定義,如下: <groupId>org.sonatyp
maven外掛詳解
一、maven-jar-plugin外掛詳解 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-j
Maven使用詳解
以下內容轉載自:https://juejin.im/post/5ba1119af265da0ae343ea96 (掘金 作者:leegive) 這裡僅做學習記錄使用,感謝! Maven使用詳解,非常詳細 什麼是Maven? 如今我們構建一個專案需要用到很多第三方的類庫,如寫一個
Eclipse匯入Maven專案詳解(新手初學)
最近遇到Maven管理下的spring MVC專案,組內某位將專案程式碼扔過來,一臉懵逼(囧),查閱了一些資料後終於將此專案執行通了(>_<),特此記錄下來與各位分享。 通俗的來說,Maven就是個類似於Git的專案管理工具。而Spring MVC就是將M(Mo
Spark寬窄依賴詳解_
1.寬窄依賴 圖中左邊是寬依賴,父RDD的4號分割槽資料劃分到子RDD的多個分割槽(一分割槽對多分割槽),這就表明有shuffle過程,父分割槽資料經過shuffle過程的hash分割槽器(也可自定義分割槽器)劃分到子RDD。例如GroupByKey,reduceByKey,
Maven學習總結(49)——Maven Profile詳解
前言 Profile能讓你為一個特殊的環境自定義一個特殊的構建;profile使得不同環境間構建的可移植性成為可能。Maven中的profile是一組可選的配置,可以用來設定或者覆蓋配置預設值。有了profile,你就可以為不同的環境定製構建。profile可以在pom.x
myeclipse安裝maven過程詳解
首先要先配置自己本機的java環境變數,在系統變數新增 JAVA_HOME = C:\Program Files\Java\jdk1.6.0_17 ,然後在path系統變數中新增 %JAVA_HOME %\bin.這是安裝maven的必須條件,不能缺少。 然後下載mave
Eclipse使用之匯入Maven專案詳解
通俗的來說,Maven就是個類似於git的專案管理工具。而Spring MVC就是將M(Model)、V(View)、C(Controller)三者進行分離進行處理,更有利於開發的進行。下面我將介紹一個別人已經編譯好的Maven專案扔給你應該怎樣匯
maven(四) Spring Boot Maven plugin詳解
Spring Boot的Maven外掛(Spring Boot Maven plugin)能夠以Maven的方式為應用提供Spring Boot的支援,即為Spring Boot應用提供了執行Maven操作的可能。 Spring Boot Maven plugin能夠將Spring Boot
Maven命令詳解 模組匯入 MyEclipse + Maven開發Web工程的詳細配置過程
一:Maven命令解釋: mvn compile:編譯 mvn test:測試 mvn clean:清空,會去除掉target檔案(報告檔案,一些錯誤資訊會在這裡面)。 mvn package:打包(會將我們的專案打包成一個jar包這個jar包同樣可以配置到pom.xml中供其他專案使用)(專案中引入模組
eclipse中maven外掛詳解
Maven,發音是[`meivin],"專家"的意思。它是一個很好的專案管理工具,很早就進入了我的必備工具行列,但是這次為了把ABPM專案完全遷移並應用maven,所以對maven進行了一些深入的學習。寫這個學習筆記的目的,一個是為了自己備忘,二則希望能夠
eclipse中maven使用詳解
Maven這個個專案管理和構建自動化工具,越來越多的開發人員使用它來管理專案中的jar包。本文僅對Eclipse中如何安裝、配置和使用Maven進行了介紹。完全step by step。 根據你的作業系統具體情況選擇相應的版本。我這裡選擇的是“Eclip
Maven使用詳解:Maven的概述(一)
先決條件(Prerequisites) 你一定已經瞭解瞭如何安裝maven在你的電腦上,如果你還不知道改如何安裝maven的話,你可以通過詢問身邊的同事或者同學,也可以通過網路搜尋來檢視如何安裝,這裡我們對這個問題不做過多的解釋。 Maven安裝(Installation)
maven語法詳解pom
<project xmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xsi:s
關於spark RDD trans action運算元、lineage、寬窄依賴詳解
這篇文章想從spark當初設計時為何提出RDD概念,相對於hadoop,RDD真的能給spark帶來何等優勢。之前本想開篇是想總體介紹spark,以及環境搭建過程,但個人感覺RDD更為重要鋪墊在hadoop中一個獨立的計算,例如在一個迭代過程中,除可複製的檔案系統(HDFS)
Maven學習詳解(13)——Maven常用命令大全與pom檔案講解
一、Maven常用命令 1.1、Maven 引數 -D 傳入屬性引數 -P 使用pom中指定的配置 -e 顯示maven執行出錯的資訊 -o 離線執行命令,即不去遠端倉庫更新包 -X 顯示maven允許的debug資訊 -U 強制去遠端參考更新snapshot