1. 程式人生 > 其它 >Java:Maven(一)

Java:Maven(一)

Maven介紹

1.1 什麼是Maven

1.1.1 什麼是Maven

Maven是一個專案管理工具,它包含了一個專案物件模
型 ( POMProject Object Model ),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管
理系統(Dependency Management System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標
(goal)的邏輯。


1.1.2 Maven能解決什麼問題

可以用更通俗的方式來說明。我們知道,專案開發不僅僅是寫寫程式碼而已,期間會伴隨著各種必不可少的事情要做,下面列舉幾個感受一下:
1 、我們需要引用各種jar包,尤其是比較大的工程,引用的jar包往往有幾十個乃至上百個, 每用到一種jar包,都需要手動引入工程目錄,而且經常遇到各種讓人抓狂的jar包衝突,版本衝突。
2 、我們辛辛苦苦寫好了Java檔案,可是隻懂 0 和 1 的白痴電腦卻完全讀不懂,需要將它編譯成二進位制位元組碼。好歹現在這項工作可以由各種整合開發工具幫我們完成,Eclipse、IDEA等都可以將程式碼即時編譯。當然,如果你嫌生命漫長,何不鋪張,也可以用記事本來敲程式碼,然後用javac命令一個個地去編譯,逗電腦玩。
3 、世界上沒有不存在bug的程式碼,計算機喜歡bug就和人們總是喜歡美女帥哥一樣。為了追求美為了減少bug,因此寫完了程式碼,我們還要寫一些單元測試,然後一個個的執行來檢驗程式碼質量。
4 、再優雅的程式碼也是要出來賣的。我們後面還需要把程式碼與各種配置檔案、資源整合到一起,定型打包,如果是web專案,還需要將之釋出到伺服器,供人蹂躪。

試想,如果現在有一種工具,可以把你從上面的繁瑣工作中解放出來,能幫你構建工程,管理 jar包,編譯程式碼,還能幫你自動執行單元測試,打包,生成報表,甚至能幫你部署專案,生成Web站點,你會心動嗎?Maven就可以解決上面所提到的這些問題。


1.1.3 Maven的優勢舉例

前面我們通過Web階段專案,要能夠將專案執行起來,就必須將該專案所依賴的一些jar包新增到工程中,否則專案就不能執行。試想如果具有相同架構的專案有十個,那麼我們就需要將這一份jar包複製到十個不同的工程中。我們一起來看一個CRM專案的工程大小。使用傳統Web專案構建的CRM專案如下:

原因主要是因為上面的WEB程式要執行,我們必須將專案執行所需的Jar包複製到工程目錄中,從而導致了工程很大。同樣的專案,如果我們使用Maven工程來構建,會發現總體上工程的大小會少很多。如下圖:

小結:可以初步推斷它裡面一定沒有jar 包,繼續思考,沒有jar包的專案怎麼可能執行呢?


1.2 Maven的兩個精典作用

1.2.1 Maven的依賴管理

Maven的一個核心特性就是依賴管理。當我們涉及到多模組的專案(包含成百個模組或者子專案),管理依賴就變成一項困難的任務。Maven展示出了它對處理這種情形的高度控制。傳統的WEB專案中,我們必須將工程所依賴的jar包複製到工程中,導致了工程的變得很大。那麼maven工程是如何使得工程變得很少呢?分析如下:

通過分析發現:maven工程中不直接將jar包匯入到工程中,而是通過在pom.xml檔案中新增所需jar包的座標,這樣就很好的避免了jar直接引入進來,在需要用到jar包的時候,只要查詢pom.xml檔案,再通過pom.xml檔案中的座標,到一個專門用於”存放jar包的倉庫”(maven倉庫)中根據座標從而找到這些jar包,再把這些jar包拿去執行。
那麼問題來了
第一:”存放jar包的倉庫”長什麼樣?
第二:通過讀取pom.xml 檔案中的座標,再到倉庫中找到jar包,會不會很慢?從而導致這種方式不可行!

第一個問題:存放jar包的倉庫長什麼樣,這一點我們後期會分析倉庫的分類,也會帶大家去看我們的本地的倉庫長什麼樣。
第二個問題:通過pom.xml檔案配置要引入的jar包的座標,再讀取座標併到倉庫中載入jar包,這樣我們就可以直接使用jar包了,為了解決這個過程中速度慢的問題,maven中也有索引的概念,通過建立索引,可以大大提高載入jar包的速度,使得我們認為jar包基本跟放在本地的工程檔案中再讀取出來的速度是一樣的。這個過程就好比我們查閱字典時,為了能夠加快查詢到內容,書前面的目錄就好比是索引,有了這個目錄我們就可以方便找到內容了,一樣的在maven倉庫中有了索引我們就可以認為可以快速找到jar包。


1.2.2 專案的一鍵構建

我們的專案,往往都要經歷編譯、測試、執行、打包、安裝 ,部署等一系列過程。

什麼是構建?

指的是專案從編譯、測試、執行、打包、安裝 ,部署整個過程都交給maven進行管理,這個過程稱為構建。
一鍵構建:指的是整個構建過程,使用maven一個命令可以輕鬆完成整個工作。

Maven規範化構建流程如下:

我們一起來看Hello-Maven工程的一鍵執行的過程。通過tomcat:run的這個命令,我們發現現在的
工程編譯,測試,執行都變得非常簡單。


Maven 的使用

2.1 Maven的安裝

2.1.1 Maven軟體的下載

為了使用Maven管理工具,我們首先要到官網去下載它的安裝軟體。可以通過百度搜索“Maven“下載。
我使用的版本是apache-maven-3.5.3版本大家也可以下載最新版本。
Apache-maven-3.5.2下載地址:http://archive.apache.org/dist/maven/maven-3/
下載後的版本如下:


2.1.2 Maven軟體的安裝

Maven下載後,將Maven解壓到一個沒有中文沒有空格的路徑下,比如D:\maven下面。
解壓後目錄結構如下:

bin:存放了maven的命令,比如我們前面用到的mvn tomcat:run
boot:存放了一些maven本身的載入程式,如類載入器等
conf:存放了maven的一些配置檔案,如setting.xml檔案
lib:存放了maven本身執行所需的一些jar包
至此我們的maven軟體就可以使用了,前提是你的電腦上之前已經安裝並配置好了JDK。


2.1.3 JDK的準備及統一

我所使用JDK8版本

  1. JDK環境:jdk、jre

2.1.4 Maven及JDK配置

電腦上需安裝java環境,安裝JDK1.7 + 版本 (將JAVA_HOME/bin 配置環境變數path ),我們使用的是JDK8相關版本

配置 MAVEN_HOME ,變數值就是你的maven安裝 的路徑(bin目錄之前一級目錄)

上面配置了我們的Maven軟體,注意這個目錄就是之前你解壓maven的壓縮檔案包在的的目錄,最好不要有中文和空格。


2.1.5 Maven軟體版本測試

通過 mvn -v命令檢查 maven是否安裝成功,看到maven的版本為3.5.2及java版本為1. 8 即為安裝成功。
找開cmd命令,輸入mvn –v命令,如下圖:

我們發現maven的版本,及jdk的版本符合要求,這樣我們的maven軟體安裝就成功了。


2.2 Maven倉庫

2.2.1 Maven倉庫的分類

maven的工作需要從倉庫下載一些jar包,如下圖所示,本地的專案A、專案B等都會通過maven軟體從遠端倉庫(可以理解為網際網路上的倉庫)下載jar包並存在本地倉庫,本地倉庫 就是本地資料夾,當第二次需要此jar包時則不再從遠端倉庫下載,因為本地倉庫已經存在了,可以將本地倉庫理解為快取,有了本地倉庫就不用每次從遠端倉庫下載了。

下圖描述了maven中倉庫的型別:

  • 本地倉庫 :用來儲存從遠端倉庫或中央倉庫下載的外掛和jar包,專案使用一些外掛或jar包,優先從本地倉庫查詢預設本地倉庫位置在 ${user.dir}/.m2/repository,${user.dir}表示windows使用者目錄。

  • 遠端倉庫:如果本地需要外掛或者jar包,本地倉庫沒有,預設去遠端倉庫下載。遠端倉庫可以在網際網路內也可以在區域網內。

  • 中央倉庫 :在 maven軟體中內建一個遠端倉庫地址http://repo1.maven.org/maven2 ,它是中央倉庫,服務於整個網際網路,它是由Maven團隊自己維護,裡面儲存了非常全的jar包,它包含了世界上大部分流行的開源專案構件。


2.2.2 Maven本地倉庫的配置

在MAVE_HOME/conf/settings.xml檔案中配置本地倉庫位置(maven的安裝目錄下):

開啟settings.xml檔案,配置如下:


2.2.3 全域性setting與使用者setting

maven倉庫地址、私服等配置資訊需要在setting.xml檔案中配置,分為全域性配置和使用者配置。在maven安裝目錄下的有 conf/setting.xml檔案,此setting.xml檔案用於maven的所有project專案,它作為maven的全域性配置。如需要個性配置則需要在使用者配置中設定,使用者配置的setting.xml檔案預設的位置在:${user.dir}/.m2/settings.xml目錄中,${user.dir} 指windows 中的使用者目錄。
maven會先找使用者配置,如果找到則以使用者配置檔案為準,否則使用全域性配置檔案。


2.3 Maven工程的認識

2.3.1 Maven工程的目錄結構


作為一個maven工程,它的src目錄和pom.xml是必備的。進入src目錄後,我們發現它裡面的目錄結構如下:

src/main/java —— 存放專案的.java檔案
src/main/resources —— 存放專案資原始檔,如spring, hibernate配置檔案
src/test/java —— 存放所有單元測試.java檔案,如JUnit測試類
src/test/resources —— 測試資原始檔
target —— 專案輸出位置,編譯後的class檔案會輸出到此目錄
pom.xml——maven專案核心配置檔案

注意:如果是普通的java專案,那麼就沒有webapp目錄。


2.3.2 Maven工程的執行

進入maven工程目錄(當前目錄有pom.xml檔案),執行tomcat:run命令。
根據提示資訊,通過瀏覽器訪問:http://localhost:8080/maven-helloworld/


2.3.3 問題處理

如果本地倉庫配置錯誤會報下邊的錯誤

分析:

maven工程執行先從本地倉庫找jar包,本地倉庫沒有再從中央倉庫找,上邊提示downloading...表示 從中央倉庫下載jar,由於本地沒有聯網,報錯。

解決:
在maven安裝目錄的conf/setting.xml檔案中配置本地倉庫,參考:“maven倉庫/配置本地倉庫章節”。


參考黑馬,侵刪