Maven——第1章 Maven 介绍
1.1 什么是 Maven
1.1.1 什么是 Maven
Maven 的正確發音是[?mev?n],而不是“馬瘟”以及其他什么瘟。Maven 在美國是一個口語化的詞語,代表專家、內行的意思。
一個對 Maven 比較正式的定義是這么說的:Maven 是一個項目管理工具,它包含了一個項目對象模型 (POM:Project Object Model),一組標準集合,一個項目生命周期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。
1.1.2 Maven 能解決什么問題
可以用更通俗的方式來說明。我們知道,項目開發不僅僅是寫寫代碼而已,期間會伴隨著各種
必不可少的事情要做,下面列舉幾個感受一下:
試想,如果現在有一種工具,可以把你從上面的繁瑣工作中解放出來,能幫你構建工程,管理 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 的這個命令,我們發現現在的工程編譯,測試,運行都變得非常簡單。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Maven——第1章 Maven 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程安全与锁优化(思维导图)
- 下一篇: leetcode206.反转链表 解题思