1、Maven 是幹什麼的?
Maven 是一個項目管理工具,可以對 Java 項目進行構建、依賴管理。
Maven 的正確發音是[ˈmevən],而不是“馬瘟”以及其他什麼瘟
2、Maven 解決了什麼痛點?
① 添加第三方 jar 包
手動會出現 jar 包衝突,版本衝突。通過統一的 Maven 倉庫我們可以享受到一個完全統一規範的 jar 包管理體系。
② jar 包之間的依賴關係
Maven 可以替我們自動的將當前 jar 包所依賴的其他所有 jar 包全部導入進來,無需人工參與,節約了我們大量的時間和精力。
③ 將項目拆分成多個工程模塊
3、Maven 的同類技術
Java世界中主要有三大構建工具 Ant、Maven和Gradle
Ant(Another Neat Tool), 開始主要用來構建著名的 Tomcat ,產生的動機是由於作者 James Duncan Davidson 受不了 Makfile 的語法格式。
Maven 的產生,也是由於厭倦了日復一日的手工構建工作,對各個項目風格迥異的構建系統感到麻煩。Maven 的依賴管理以及項目構建規則重用性等特點,讓 Maven幾乎成為 Java構 建工具的事實標準。
Gradle 作為新的構建工具,基於 Groovy 語言的構建工具,既保持了 Maven 的優點,通過使用 Groovy 定義,克服了 Maven 中使用 XML 繁冗以及不靈活等缺點,它最後被 google 作為了 Android 御用管理工具。
4、使用 Maven 的環境配置
環境配置都是一個套路,不詳細展開。
① Maven 是一個基於 Java 的工具,所以要做的第一件事情就是安裝 JDK
② Maven 安裝
注意:以 Idea 打開項目為例,每當我們從 gitlab 上 clone 項目時,通常使用的是 idea 自帶的 maven 路徑。
實際開發中我們的很多依賴包是從公司私庫裡下載的,你需要找同事要一份 setting.xml 文件替換你原有的文件。
在 windows 下,我們一般將文件不放到 C 盤,放到其他盤符中。
5、Maven 的約定配置
Maven 提倡使用一個共同的標準目錄結構,Maven 使用約定優於配置的原則,大家儘可能的遵守這樣的目錄結構
6、Maven 構建生命週期
【面試:maven package與maven install 命令的區別? 】
在項目中經常會發生,一個子項目修改了但是其他有依賴該子項目的項目卻依賴不到。
① maven install:打包好的 jar 包會安裝到本地的 maven 倉庫中,使用的配置是默認的配置,供其他項目使用。
② maven package 打包後的文件存放到項目的 target 目錄下。
總結:
如果子項目之間的工程,發生改動,改動的子項目要進行maven install,然後需要調用該子項目的子項目進行maven package
最簡單的方式就是父工程進行 maven install
最煩人的是這種情況,依賴的是遠程私庫的包,如果你是一名開發者,你修改了這個遠程包,一定要記得 clean、install 和 deploy ,不然其他開發者的項目會報錯。
7、Maven 倉庫分類
Maven 的倉庫只有兩大類:
1、本地倉庫
2、遠程倉庫
在遠程倉庫中又分成了 3 種:
① 中央倉庫
② 私服
③ 其它公共庫
Maven 會先搜索本地倉庫(repository),發現本地沒有然後從遠程倉庫(中央倉庫)獲取。
但中央倉庫只有一個,最好從其鏡象處下載。國內可以用阿里雲下的服務器。【其它公共庫】
也有通過 Nexus 搭建的私服進行獲取的。【私服】
我們也 把 Maven 中的倉庫分為兩種:
① SNAPSHOT 快照倉庫
② RELEASE 發佈倉庫
SNAPSHOT 快照倉庫用於保存開發過程中的不穩定版本,RELEASE 正式倉庫則是用來保存穩定的發行版本。定義一個組件/模塊為快照版本,只需要在 pom 文件中在該模塊的版本號後加上 -SNAPSHOT 即可(注意這裡必須是大寫)
Maven 會根據模塊的版本號(pom 文件中的 version)中是否帶有 -SNAPSHOT 來判斷是快照版本還是正式版本。
a.如果是快照版本,那麼在 mvn deploy 時會自動發佈到快照版本庫中,會覆蓋老的快照版本。而在使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,Maven 會自動從鏡像服務器上下載最新的快照版本。
b.如果是正式發佈版本,那麼在 mvn deploy 時會自動發佈到正式版本庫中,而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模塊則不會主動去鏡像服務器上下載。
所以,我們在開發階段,可以將公用庫的版本設置為快照版本,而被依賴組件則引用快照版本進行開發,在公用庫的快照版本更新後,我們也不需要修改 pom 文件提示版本號來下載新的版本,直接 mvn 執行相關編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發。
閱讀更多 Python大星 的文章