1. 程式人生 > >Maven依賴詳解

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 通過groupIdartifactIdversion三個向量來定位Maven 倉庫其jar 包所在的位置,並把對應的jar 包引入到工程中來。

二、依賴範圍

在引入log4j 依賴的時候,有一個scope設定,這個scope設定的值就是對應的依賴範圍(因為compile 是預設的依賴範圍,所以有時也可以省略)。

Maven 提供了六種依賴的範圍:compiletest

providedruntimesystemimport。其中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