Maven是什麼? Maven的概念+作用+倉庫的介紹+常用命令

Maven系列1

在這裡插入圖片描述

1.什麼是Maven?

Maven是一個項目管理工具,它包含了一個對象模型。一組標準集合,一個依賴管理系統。和用來運行定義在生命周期階段中插件目標和邏輯。
核心功能
Maven的核心功能是合理敘述項目間的依賴關係,通俗點 就是通過pom.xml文件的配置獲取jar包不用手動的去添加jar包,,這個pom.xml包我後面會敘述,不過已經學習過maven的 人應該對這個很熟悉。其本質就是通過配置pom.xml來獲取jar包,當然這是在該項目必須是maven項目的前提下。那麼什麼是maven項目
maven項目是啥?
我們這樣來理解maven項目,就是在java項目和web項目上裹了一層maven,本質上java項目還是java項目,web項目還是web項目,但是包裹了maven之後,就可以使用maven提供的一些功能,即通過pom.xml添加jar包
就像在蜜汁雞外面裹了一層麵粉油炸一下變成了炸雞,但是他還是一隻雞

在這裡插入圖片描述

在這裡插入圖片描述

2.Maven能夠解決什麼問題

在想Maven可以解決什麼問題之前我們先來想想我們開發過程中經常遇到什麼問題
1、我們需要引用各種 jar 包,尤其是比較大的工程,引用的 jar 包往往有幾十個乃至上百個, 每用到一種 jar 包,都需要手動引入工程目錄,而且經常遇到各種讓人抓狂的 jar 包衝突,版本衝突。
2、我們辛辛苦苦寫好了 Java 文件,可是只懂 0 和 1 的白痴電腦卻完全讀不懂,需要將它編譯成二進制位元組碼。好歹現在這項工作可以由各種集成開發工具幫我們完成,Eclipse、IDEA 等都可以將代碼即時編譯。當然,如果你嫌生命漫長,何不鋪張,也可以用記事本來敲代碼,然後用 javac 命令一個個地去編譯,逗電腦玩。
3、世界上沒有不存在 bug 的代碼,計算機喜歡 bug 就和人們總是喜歡美女帥哥一樣。為了追求美為了減少 bug,因此寫完了代碼,我們還要寫一些單元測試,然後一個個的運行來檢驗代碼質量。
4、再優雅的代碼也是要出來賣的。我們後面還需要把代碼與各種配置文件、資源整合到一起,定型打包,如果是 web 項目,還需要將之發佈到服務器,供人蹂躪。
maven所幫助我們解決的問題
以上的這些問題maven都把我們解決了,沒錯maven可以幫我們
1構建工程,
2管理jar,
3.編譯代碼,
4.自動運行單元測試,
5.打包
6.生成報表,
7.部署項目,生成web站點。

有沒有孫悟空得到金箍棒的感覺
在這裡插入圖片描述

3.接下來我就舉個例子讓大家先見識見識maven的功能

在這裡插入圖片描述前面我們通過web階段的項目,要能夠將項目運行起來,就必須將該項目所依賴的一些jar包添加到工程中,否則項目就不可以運行了,如果相同架構的項目有十幾個,那麼我們就需要將這一份jar包複製到十個不同的工程中我們一起來看看CRM工程的大小
使用傳統的CRM項目

在這裡插入圖片描述

使用maven構建

在這裡插入圖片描述

4.Maven的依賴管理

為什麼使用maven之後文件夾就如此之小了呢?其實這我們在前面就提到過了即通過配置pom.xml的文件來配置依賴,而Maven的一個核心特徵就是依賴管理,當我們涉及到多模塊的項目(包含成百個模塊或者子項目),管理依賴就變成了一個極為困難的任務Maven展示出了他對處理這種情形的高度控制
傳統的web項目中,我們必須將工程所依賴的jar包複製到工程中,導致工程變的很大,那麼maven是如何通過操作使工程變少的呢

在這裡插入圖片描述通過圖解可以發現maven工程不直接將jar包導入到工程中,而是通過再pom.xml中添加所需的jar包的坐標,這樣就避免了jar直接引入進來,在需要用到jar包的時候,只要查找pom.xml文件,再通過pom.xml中的坐標,到一個專門用於存放jar包的倉庫中根據坐標從而找到這些jar包,再把這些jar包拿去運行
看到這讀者們可能會有疑問
1.存放jar包的倉庫長什麼樣?
這個我們會在後面一一講解,倉庫也分為許多種類
2.通過讀取pom.xml坐標,來找jar的方式會不會導致速度很慢。從而導致這些方案不可行
通過 pom.xml 文件配置要引入的 jar 包的坐標,再讀取坐標併到倉庫中加載 jar 包,這
樣我們就可以直接使用 jar 包了,為了解決這個過程中速度慢的問題,maven 中也有索引的概念,通過建立索引,可以大大提高加載 jar 包的速度,使得我們認為 jar 包基本跟放在本地的工程文件中再讀取出來的速度是一樣的。這個過程就好比我們查閱字典時,為了能夠加快查找到內容,書前面的目錄就好比是索引,有了這個目錄我們就可以方便找到內容了,一樣的在 maven 倉庫中有了索引我們就可以認為可以快速找到 jar 包。

5.倉庫的概念

倉庫就是存放jar包的地方,即我們前面說的通過pom.xml中通過設置索引來到倉庫中尋找jar包
倉庫分為:本地倉庫,第三方倉庫,中央倉庫

5.1本地倉庫
用來存儲從遠程倉庫或者中央倉庫下載的插件和jar包,項目使用一些插件或jar包
優先從本地倉庫查找
默認本地倉庫的位置在${user.dir}/.m2/repository,${user.dir}表示 windows 用戶目錄。
在這裡插入圖片描述
5.2第三方倉庫
d第三方倉庫,又稱為內部中心倉庫,又稱為私服
私服:一般由公司自己設立,只為本公司內部共享使用,它既可以作為公司內部構建協作和存檔,也可作為公用類庫鏡像緩存,減少在外部訪問和下載的頻率使用私服為了減少對中央倉庫的訪問私服可以使用的是局域網,中央倉庫必須使用外網。也就是一般公司都會創建這種第三方倉庫,保證項目開發時,項目所需用的jar都從該倉庫中拿,每個人的版本就都一樣。
注意:連接私服,需要單獨配置。如果沒有配置私服,默認不使用

5.3中央倉庫
在 maven 軟件中內置一個遠程倉庫地址 //repo1.maven.org/maven2 ,它是中央倉庫,服務於整個互聯網,它是由 Maven 團隊自己維護,裏面存儲了非常全的 jar 包,它含了世界上大部分流行的開源項目構件。

獲取jar包的過程
優先從本地倉庫查找,如果本地倉庫沒有該jar包,如果配置了私服,就從私服中查找,私服中沒有就從中央倉庫中查找,然後下載到本地倉庫,下次使用就可以直接從本地倉庫中查找,沒有配置私服則,直接從中央倉庫中查找
在這裡插入圖片描述

6.Maven java項目結構

Maven工程目錄結構

在這裡插入圖片描述圖中有一個target目錄,是因為將該java項目進行了編譯,src/main/java下的源代碼就會編譯成.class文件放入target目錄中,target就是輸出目錄。
作為一個 maven 工程,它的 src 目錄和 pom.xml 是必備的。
進入 src 目錄後,我們發現它裏面的目錄結構如下:
在這裡插入圖片描述

項目名稱
–pom.xml 核心配置,項目根下
–src
–main
–java java源碼目錄
–resources java配置文件目錄
–test
–java 源碼測試目錄
–resource 測試配置目錄

7.maven的常用命令

7.1 compile
compile是maven工程的編譯命令,作用是將 src/main/java 下的文件編譯為 class 文件輸出到 target
目錄下。
7.2 test
test是maven工程的測試命令,會執行 src/test/java 下的單元測試類。
cmd 執行 mvn test 執行 src/test/java 下單元測試類,下圖為測試結果,運行 1 個測試用例,全部成功。
7.3 clean
clean是maven工程的清理命令,執行clean會刪除target目錄及其內容
7.4 package
package是maven工程的打包命令,對於java工程執行 package 打成 jar 包,對於 web 工程打成 war
包。
7.5 install
install 是 maven 工程的安裝命令,執行 install 將 maven 打成 jar 包或 war 包發佈到本地倉庫。
從運行結果中,可以看出:當後面的命令執行時,前面的操作過程也都會自動執行

8.maven的生命周期

maven對項目構建過程分為三套相互獨立的生命周期,這裡說的三套而且是相互獨立,
這三套分別是:
Clean Lifecycle :在進行真正的構建之前進行一些清理工作。
Default Lifecycle :構建的核心部分,編譯,測試,打包,部署等等。
Site Lifecycle :生成項目報告,站點,發佈站點。

9.maven的概念模型

Maven 包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命周期(Project
Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段
(phase)中插件(plugin)目標(goal)的邏輯。

在這裡插入圖片描述

9.1項目對象模型
一個maven工程都有一個pom.xml文件。通過pom.xml文件定義項目的坐標,項目的依賴,項目的信息
插件目標等

9.2依賴管理系統
通過 maven 的依賴管理對項目所依賴的 jar 包進行統一管理。
比如:項目依賴 junit4.9,通過在 pom.xml 中定義 junit4.9 的依賴即使用 junit4.9,如下所示是 junit4.9
的依賴定義:

<!-- 依賴關係 -->
<dependencies>
<!-- 此項目運行使用 junit,所以此項目依賴 junit -->
<dependency>
<!-- junit 的項目名稱 -->
<groupId>junit</groupId>
<!-- junit 的模塊名稱 -->
<artifactId>junit</artifactId>
<!-- junit 版本 -->
<version>4.9</version>
<!-- 依賴範圍:單元測試時使用 junit -->
<scope>test</scope>
</dependency>

9.3 一個項目的生命周期
使用maven完成項目的構建,項目構建包括:清理,編譯,部署等過程,maven將這些過程規範為一個生命周期,如下所示是生命周期的各階段

在這裡插入圖片描述
maven 通過執行一些簡單命令即可實現上邊生命周期的各各過程,比如執行 mvn compile 執行編譯、
執行 mvn clean 執行清理。

9.4 一組標準集合
maven將整個項目管理過程定義為一組標準集合,比如通過maven構建工程有標準的目錄結構,有標準的生命周期階段,依賴管理有標準的坐標定義

9.5 插件目標

maven管理項目生命周期都是基於插件完成的

10.使用idea開發meven項目

這個就是幾個簡單的參數配置一下沒什麼東西講,我就放個流程圖好了

1.
在這裡插入圖片描述2.

在這裡插入圖片描述
3.

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
6.
在這裡插入圖片描述
7.
在這裡插入圖片描述
8.
在這裡插入圖片描述9.

在這裡插入圖片描述10.

在這裡插入圖片描述
11.
在這裡插入圖片描述

11.獲取jar包方式

到中央倉庫的官網上去下載
網址:
//search.maven.org/
//mvnrepository.com/

例圖:
在這裡插入圖片描述

以上就是maven的一些基礎知識,後續我會更新更高階的maven知識
,即我們在項目中經常使用到的,喜歡的也可以關注我,創作不易,
覺得有幫助的可以點贊收藏關注

在這裡插入圖片描述

Tags: