Maven總結1/3-----概述

1.Maven 概述

maven是一個項目管理工具

(1)依賴管理

傳統工程 maven工程
直接把jar包放在在項目中 真正的jar包放置在倉庫中,項目中只用放置jar包的座標

(2) 依賴範圍

Compile Test Runtime Provided

(3)倉庫的種類

種類 作用
本地倉庫
遠程倉庫(私服) 放置公司內部開發所需要的jar包
中央倉庫 安裝完maven之後,本地maven自動連接中央倉庫。

(4)倉庫之間的關係

類別 關係
本地倉庫與pom文件 當我們啓動一個maven工程的時候,maven工程會通過pom文件中的jar包的座標去本地倉庫找對應的jar包(如果是編譯階段,可以直接找本地項目的源碼)
本地倉庫和中央倉庫倉庫 默認情況下(或公司斷網時候),如果本地倉庫沒有jar包,maven工程會自動(斷網時通過局域網連接遠程倉庫)去中央倉庫下載jar包到本地。
本地倉庫和遠程倉庫 在公司中,如果本地沒有對應的jar包,會先從私服下載jar包,如果私服沒有jar包,可以從中央倉庫下載,也可以從本地上傳。

2.Maven 的好處

節省磁盤空間,可以一鍵構建,可以跨平臺,應用在大型項目時可以提高開發效率

一鍵構建:maven自身集成了tomcat插件,可以對項目進行編譯、測試、打包、安裝、發佈等操作。

maven三套生命週期:清理生命週期、默認生命週期、站點生命週期。

3. Maven生命週期

命令 含義
clean 構建項目的時候,清理之前構建項目的信息
validate 驗證項目是否正確,所有必要的信息可用
compile 對src/main下的目錄進行編譯
test 使用合適的單元測試框架測試編譯的源代碼。這些測試不應該要求代碼被打包或部署
package 本地項目直接打包,打包在本地編譯目錄—target目錄下
verify 對集成測試的結果執行任何檢查,以確保滿足質量標準
install 把包安裝到本地倉庫
deploy 本地做好的項目直接打包上傳到私服,與其他開發人員和項目共享

4. 座標的書寫規範

groupId 公司或組織域名的倒序
artifactId  項目名或模塊名 
version   版本號

示例:

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
	  <!--座標作用域,非必填-->
      <scope>test</scope>
</dependency>

5. 解決衝突

maven工程要導入jar包的座標,就必須要考慮解決jar包衝突。

maven導入jar包中的一些概念

直接依賴:項目中直接導入的jar包,就是在該項目中的直接依賴包。
傳遞依賴:項目中沒有直接導入的jar包,可以通過項目直接依賴jar包傳遞到項目中去。

解決衝突方式一:第一聲明優先原則

概念:哪個jar包的座標在靠上的位置,這個jar包就是先聲明的。
先聲明的jar包座標下的依賴包,可以優先進入項目中。

解決衝突方式二:路徑近者優先原則。

直接依賴路徑比傳遞依賴路徑近,那麼最終項目進入的jar包會是路徑近的直接依賴包。

解決衝突方式三:直接排除法(推薦使用)

當我們要排除某個jar包下依賴包,在配置exclusions標籤的時候,內部可以不寫版本號。
因爲此時依賴包使用的版本會默認和本jar包一樣。

6.maven工程父子依賴

maven工程是可以分父子依賴關係:一個項目依賴另一個項目。

凡是依賴別的項目或拿到別的項目的依賴包,都屬於傳遞依賴。

比如:當前A項目,被B項目依賴,那麼我們A項目中所有jar包都會傳遞到B項目中,B項目開發者,如果在B項目中導入一套ssm框架的jar包,對於B項目是直接依賴,那麼直接依賴的jar包就會把我們A項目傳遞過去的jar包覆蓋掉。

爲了防止以上情況出現。我們可以把A項目中主要jar包的座標鎖住,那麼其他依賴該項目的項目中,及時有同名jar包直接依賴,也無法覆蓋。

  <!-- 統一管理jar包版本 -->
  <properties>
    <spring.version>5.0.2.RELEASE</spring.version>
  </properties>
  
  <!-- 鎖定jar包版本:子項目不可更改 -->
  <dependencyManagement>
  	<dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
      </dependency>
  	<dependencies>
  </dependencyManagement>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章