【Maven】學習筆記:自動化構建工具Maven
文章目錄
- 【Maven】學習筆記:自動化構建工具Maven
- 1.什么是Maven
- 2.為什么使用Maven
- 3.Maven介紹
- 3.1 POM
- 3.2約定的目錄結構
- 3.3坐標
- 3.4依賴管理
- 3.5倉庫管理
- 3.5.1分類
- 3.5.2 倉庫中的內容
- 3.6生命周期
- 3.7插件和目標
- 3.8繼承
- 3.8.1創建父工程
- 3.8.2在子工程中旅引入父工程
- 3.8.3在父工程中管理依賴
- 3.9聚合
- 3.9.1為什么要使用聚合
- 3.9.2如何配置聚合
- 3.10常用命令
1.什么是Maven
Maven 是 Apache 軟體基金會組織維護的一款自動化構建工具,專注服務于 Java 平臺的專案構建和依賴管理
2.為什么使用Maven
在以前,我們開發Java應用要依賴一些jar包,我們要去網上找這些需要的jar包,并把它們復制到相應的工程目錄下( WEB-INF/lib ),
缺點:
1.每次都要在網上尋找相應的jar包,浪費時間,
2.jar包之間存在依賴關系,比如你引入jar包A,A本身就依賴于jar包B,此時你就還需要引入jar包B,況且,jar包之間的依賴關系會更復雜,有可能引入幾個jar包的同時就需要引入十幾個jar包,所以,手動的引入jar包,還要理解它們的依賴關系,浪費時間,
3.每次創建一個新的工程就需要將 jar 包重復復制到 WEB-INF/lib 目錄下,從而造成作業區中存在大量重復的檔案,讓我們的工程顯得很臃腫,
Maven就能完美的解決以上問題,
3.Maven介紹
Maven 的九個核心概念:
①POM ②約定的目錄結構 ③坐標 ④依賴管理 ⑤倉庫管理 ⑥生命周期 ⑦插件和目標 ⑧繼承 ⑨聚合
3.1 POM
Project Object Model:專案物件模型,將 Java工程的相關資訊封裝為物件作為便于操作和管理的模型, Maven 工程的核心配置,可以說學習 Maven 就是學習 pom.xml 檔案中的配置,
3.2約定的目錄結構
約定的目錄結構對于 Maven 實作自動化構建而言是必不可少的一環,就拿自動編譯來說,Maven 必須能找到 Java 源檔案,下一步才能編譯,而編譯之后也必須有一個準確的位置保持編譯得到的位元組碼檔案,
在開發中普遍認為:約定>配置>編碼,
意思就是能用配置解決的問題就不編碼,能基于約定的就不進行配置,而 Maven 正是因為指定了特定檔案保存的目錄才能夠對我們的 Java 工程進行自動化構建,
我們在開發中如果需要讓第三方工具或框架知道我們自己創建的資源在哪,那么基本上就是兩種方式:
①通過配置的形式明確告訴它
②基于第三方工具或框架的約定
Maven 對工程目錄結構的要求就屬于后面的一種,

3.3坐標
Maven使用如下三個向量坐標(GAV)在 Maven 的倉庫中唯一的確定一個 Maven 工程,
[1]groupid:公司或組織的域名倒序+當前專案名稱
[2]artifactId:當前專案的模塊名稱
[3]version:當前模塊的版本
3.4依賴管理
使用 dependency 標簽指定被依賴 jar 包的坐標
<dependency>
? <groupId>com.atguigu.maven</groupId>
? <artifactId>Hello</artifactId>
? <version>0.0.1-SNAPSHOT</version>
? <scope>compile</scope>
</dependency>
3.5倉庫管理
3.5.1分類
[1]本地倉庫:為當前本機電腦上的所有 Maven 工程服務,
[2]遠程倉庫 :
? (1)私服:架設在當前局域網環境下,為當前局域網范圍內的所有 Maven 工程服務,
? (2)中央倉庫:架設在 Internet 上,為全世界所有 Maven 工程服務,
? (3)中央倉庫的鏡像:架設在各個大洲,為中央倉庫分擔流量,減輕中央倉庫的壓力,同時更快的回應用戶請求,
3.5.2 倉庫中的內容
[1]Maven自身需要的插件
[2]我們自己開發的Maven工程
[3]第三方框架或工具的 jar 包
不管是什么樣的 jar 包,在倉庫中都是按照坐標生成目錄結構,所以可以通過統一的方式查詢或依賴
3.6生命周期
Maven 生命周期定義了各個構建環節的執行順序,有了這個清單,Maven 就可以自動化的執行構建命令了,
運行任何一個階段的時候,它前面的所有階段都會被運行,例如我們運行 mvn install (安裝)的時候,代碼會被編譯,測驗,打包,這就是 Maven 為什么能夠自動執行構建程序的各個環節的原因,此外,Maven 的插件機制是完全依賴 Maven 的生命周期的,因此理解生命周期至關重要,
一個典型的 Maven 構建(build)生命周期是由以下幾個階段的序列組成的:

Maven 有以下三個標準的生命周期
- clean:專案清理的處理
- default(或 build):專案部署的處理
- site:專案站點檔案創建的處理
對于生命周期的概述,可以參考菜鳥教程:
https://www.runoob.com/maven/maven-build-life-cycle.html
3.7插件和目標
●Maven 的核心僅僅定義了抽象的生命周期,具體的任務都是交由插件完成的,
●每個插件都能實作多個功能,每個功能就是一個插件目標,
●Maven 的生命周期與插件目標相互系結,以完成某個具體的構建任務,
如:compile 就是插件maven-compiler-plugin的一個目標;pre-clean是插件maven-clean-plugin的一個目標,
3.8繼承
假設現在有三個工程A,B, C
A的junit版本:4.0
B的junit版本:4.0
C的junit版本:4.9
此時如果專案需要將各個模塊的junit版本統一為4.9,那么到各個工程中手動修改無疑是非常不可取的, 使用繼承機制就可以將這樣的依賴資訊統一提取到父工程模塊中進行統一管理
3.8.1創建父工程
創建父工程和創建一般的 Java 工程操作一致,唯一需要注意的是:打包方式處要設定為 pom
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>pom</packaging>
3.8.2在子工程中旅引入父工程
<parent>
? <!-- 父工程坐標 -->
? <groupId>...</groupId>
? <artifactId>...</artifactId>
? <version>...</version>
? <relativePath>從當前目錄到父專案的 pom.xml 檔案的相對路徑</relativePath>
</parent>
3.8.3在父工程中管理依賴
將 Parent 專案中的 dependencies 標簽,用 dependencyManagement 標簽括起來
<dependencies>
? <dependency>
? <groupId>junit</groupId>
? <artifactId>junit</artifactId>
? <version>4.9</version>
? <scope>test</scope>
? </dependency>
</dependencies>
</dependencyManagement>
在子專案中重新指定需要的依賴,洗掉范圍和版本號
<dependencies>
? <dependency>
? <groupId>junit</groupId>
? <artifactId>junit</artifactId>
? </dependency>
</dependencies>
3.9聚合
3.9.1為什么要使用聚合
將多個工程拆分為模塊后,需要手動逐個安裝到倉庫后依賴才能夠生效,修改原始碼后也需要逐個手動進行 clean 操作,而使用了聚合之后就可以批量進行 Maven 工程的安裝、清理作業,一鍵安裝各個模塊工程,
3.9.2如何配置聚合
在總的聚合工程中使用 modules/module 標簽組合,指定模塊工程的相對路徑即可
<modules>
? <module>../Hello</module>
? <module>../HelloFriend</module>
? <module>../MakeFriends</module>
</modules>
3.10常用命令
mvn clean:清理
mvn compile:編譯
mvn test-compile:編譯測驗
mvn test:測驗
mvn package:打包
mvn install:安裝
mvn site:生成站點
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/253513.html
標籤:其他
上一篇:用FastDFS集群自己動手搭建一個檔案管理系統,給我學!
下一篇:Linux硬鏈接與軟連接實作對比
