1. 程式人生 > 實用技巧 >Maven入門和介紹

Maven入門和介紹

Maven簡介

Maven是什麼?
Maven 翻譯為"專家"、"內行",是 Apache 下的一個純 Java 開發的開源專案。
一個對 Maven 比較正式的定義是這麼說的:
Maven 是一個專案管理工具,它包含了一個專案物件模型 (POM:Project Object Model),一組標準集合,一個項
目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來執行定義在生命周
期階段(phase)中外掛(plugin)目標(goal)的邏輯。

Maven能解決什麼問題

  可以用更通俗的方式來說明。我們知道,專案開發不僅僅是寫寫程式碼而已,期間會伴隨著各種必不可少的事情要做,

下面列舉幾個感受一下:
  1. 我們需要引用各種jar包,尤其是比較大的工程,引用的jar包往往有幾十個乃至上百個,每用到一種jar包,都需
要手動引入工程目錄,而且經常遇到各種讓人抓狂的jar包衝突,版本衝突。
  2. 我們寫好的java檔案,需要通過javac編譯成class檔案才能交給JVM執行。這項工作可以由各種整合開發工具幫
我們完成 Eclipse、IDEA 等都可以將程式碼即時編譯。
  3. 世界上沒有不存在 bug 的程式碼,因此寫完了程式碼,我們還要寫一些單元測試,然後一個個的執行來檢驗程式碼質
量。
  4. 再優雅的程式碼也是要出來賣的。我們後面還需要把程式碼與各種配置檔案、資源整合到一起,進行打包。如果是
web 專案,還需要將之釋出到伺服器 。
試想,如果現在有一種工具,可以把你從上面的繁瑣工作中解放出來,能幫你構建工程,管理 jar包,編譯程式碼,還
能幫你自動執行單元測試,打包,生成報表,甚至能幫你部署專案,生成 Web 站點,你會心動嗎? Maven 就可以
解決上面所提到的這些問題。

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包。

專案構建

我們的專案,往往都要經歷編譯、測試、執行、打包、安裝 ,部署等一系列過程。
什麼是專案構建? 指的是專案從編譯、測試、執行、打包、安裝 ,部署整個過程都交給maven進行管理,這個過程
稱為構建。 一鍵構建 指的是整個構建過程,使用maven一個命令可以輕鬆完成整個工作。
Maven規範化構建流程如下:

Maven倉庫

Maven倉庫分為本地倉庫和遠端倉庫二大類。而遠端倉庫又可分成中央倉庫,私服,第三方倉庫。

依賴尋找流程:
1.在本地倉庫中,根據Maven座標系尋找指定依賴,如果存在,直接返回。
2.如果Maven倉庫中不存在,或者需要檢查依賴的版本時,maven則會去遠端倉庫中尋找,下載到本地倉庫中再使
用。

Maven座標和依賴

  Maven的一個核心的作用就是管理專案的依賴,引入我們所需的各種jar包等。為了能自動化的解析任何一個Java構
件,Maven必須將這些Jar包或者其他資源進行唯一標識,這是管理專案的依賴的基礎,也就是我們要說的座標。包
括我們自己開發的專案,也是要通過座標進行唯一標識的,這樣才能才其它專案中進行依賴引用。

座標的定義元素如下:
  groupId:定義當前Maven專案名稱
  artifactId:定義專案模組
  version:定義當前專案的當前版本

<!--當前專案座標-->
<groupId>com.itheima</groupId>
<artifactId>maven_helloword</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

Maven工程的認識

Maven工程的目錄結構

作為一個maven工程,它的src目錄和pom.xml是必備的.

進入src目錄後,我們發現它裡面的目錄結構如下:

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

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