Maven学习(三)————Maven核心概念(二)
引言
承接上一篇《Maven學(xué)習(xí)(二)————Maven核心概念(一)》,介紹 Maven? 生命周期、插件、目標(biāo)、繼承、聚合等一些概念。
一、Maven 生命周期
1.1 理解 Maven 生命周期及主要構(gòu)建過程
Maven 構(gòu)建生命周期,也稱Maven 項目的生命周期,或 Maven 生命周期。
它描述了一個項目從編譯到發(fā)布的整個過程。一個典型的 Maven 工程構(gòu)建(build)生命周期是由以下幾個主要階段(phase)組成的。
| 驗證 validate | 驗證項目 | 驗證項目是否正確且所有必須信息是可用的 |
| 編譯 compile | 執(zhí)行編譯 | 源代碼編譯在此階段完成 |
| 測試 Test | 測試 | 使用適當(dāng)?shù)膯卧獪y試框架(例如JUnit)運行測試。 |
| 包裝 package | 打包 | 創(chuàng)建JAR/WAR包如在 pom.xml 中定義提及的包 |
| 檢查 verify | 檢查 | 對集成測試的結(jié)果進(jìn)行檢查,以保證質(zhì)量達(dá)標(biāo) |
| 安裝 install | 安裝 | 安裝打包的項目到本地倉庫,以供其他項目使用 |
| 部署 deploy | 部署 | 拷貝最終的工程包到遠(yuǎn)程倉庫中,以共享給其他開發(fā)人員和工程 |
Maven 有三個標(biāo)準(zhǔn)生命周期:clean、 build(或default)、site(生成站點,適用于動態(tài) web 項目)。
理解構(gòu)建階段和生命周期的關(guān)系很重要,一個生命周期可以劃分為多個構(gòu)建階段,Maven 的三個標(biāo)準(zhǔn)生命周期包括以下這些構(gòu)建階段:
【注意】build 生命周期中總共包含 23 個構(gòu)建階段,但比較重要的構(gòu)建階段就是上圖這些,它們并非如圖所示是緊挨著執(zhí)行的,但可以保證順序一定會如上圖所示。當(dāng)我們執(zhí)行 install 構(gòu)建過程的時候,maven會自動從 pre-clean 階段執(zhí)行,一直到 install。
1.2 構(gòu)建階段與 Maven 命令
Maven 的三個標(biāo)準(zhǔn)生命周期以及構(gòu)建階段,都會有特定的maven 指令,如上面所述,比較重要的構(gòu)建階段包括:compile、test、install等,它們對應(yīng)的命令包含但不限于以下這些:
1、mvn clean:清理上次編譯生成的 class 文件
2、mvn compile:編譯主程序(main 目錄下的源碼文件)
3、mvn test-compile:編譯測試程序(test 目錄下的源碼文件)
4、mvn test : 執(zhí)行測試
5、mvn package:獲取編譯后的字節(jié)碼文件,并按照可發(fā)布的格式打包成 jar 或 war
6、mvn install:安裝工程包到本地倉庫,該 jar 包可以作為本地其他工程的依賴。
7、mvn site:生成站點(此項構(gòu)建過程包含在 site 生命周期中,上圖未列出,只針對于動態(tài) web 項目)
如果手動執(zhí)行這些命令,需要在 pom.xml 文件所在的目錄下打開 cmd 才可以,否則會構(gòu)建失敗。通常情況下,我們會使用開發(fā)工具中的 maven 插件來執(zhí)行這些命令,而不是手動鍵入這些 maven 命令。
(目前很多項目都是 spring boot 項目,多為jar 包部署,所以本文暫不涉及 動態(tài) web 工程相關(guān)的詳細(xì)描述)
二、Maven 插件及執(zhí)行目標(biāo)
2.1?插件 plugin
Maven 插件用于完成 maven 項目的實際構(gòu)建工作。
上文中提到, Maven 包括三個標(biāo)準(zhǔn)生命周期,這三個標(biāo)準(zhǔn)生命周期以 build 作為重要,它們包含了許多細(xì)分的構(gòu)建階段,這些階段我們可以理解為一個概念性的接口,規(guī)定了這個階段所要完成的工作,而由 Maven 插件來實際真正完成這些工作內(nèi)容。
比如,我們輸入 mvn clean 來完成 clean 階段的舊字節(jié)碼文件的清理工作,但 clean 的具體操作是由 maven-clean-plugin 插件來完成的。所以說, Maven 生命周期的每一個階段的具體實現(xiàn)都是由 Maven 插件來完成的,Maven 實際上是一個依賴插件執(zhí)行的框架。
常用的插件有如下這些:
| clean | 構(gòu)建之后清理目標(biāo)文件。刪除目標(biāo)目錄。 |
| compiler | 編譯 Java 源文件。 |
| surefile | 運行 JUnit 單元測試。創(chuàng)建測試報告。 |
| jar | 從當(dāng)前工程中構(gòu)建 JAR 文件。 |
| war | 從當(dāng)前工程中構(gòu)建 WAR 文件。 |
| javadoc | 為工程生成 Javadoc。 |
| antrun | 從構(gòu)建過程的任意一個階段中運行一個 ant 任務(wù)的集合。 |
2.2 目標(biāo) goal
maven 中 目標(biāo)的概念與插件緊密聯(lián)系。一個插件目標(biāo)可以代表一個特定的任務(wù),它是比構(gòu)建階段更精細(xì)的劃分。
這些目標(biāo)被綁定在各自所屬的不同階段,或者無綁定,無綁定的目標(biāo)可以穿插在構(gòu)建過程之間獨立執(zhí)行。
插件通常提供了一個目標(biāo)的集合,并且可以使用下面的語法執(zhí)行:
mvn [plugin-name]:[goal-name]例如,我們可以單獨執(zhí)行 compiler插件中的 compile 目標(biāo)(任務(wù)):
mvn compiler:compile三、Maven繼承
Maven 提供一種依賴?yán)^承的方式,用于解決一些公共依賴統(tǒng)一版本的問題。
比如,三個maven 工程都依賴了 JUnit ,但是可能三個項目都引入了不同的版本依賴,這可能會造成某些情況下的測試結(jié)果出錯的問題。
這個時候,我們就可以將JUnit 依賴提升到父工程中,統(tǒng)一指定版本號。在這種情況下,子工程只需要在依賴中標(biāo)明 GAV 依賴坐標(biāo)的前兩項即可。這樣,就可以在父工程中統(tǒng)一管理版本號,便于管理。
3.1 操作步驟
由于本文是概念性描述,后面會有實操的演示,這里還需要留意記憶。
1、創(chuàng)建一個Maven工程作為父工程。打包方式是pom
2、在子工程中通過<parent>標(biāo)簽聲明父工程的引用
3、將子工程的坐標(biāo)中與父工程坐標(biāo)重復(fù)的部分剔除,主要是groupId 和 version
4、在父工程中統(tǒng)一junit的依賴
5、在子工程中刪除junit依賴的版本號部分
【注意】配置繼承后,執(zhí)行安裝命令時要先安裝父工程。
四、Maven聚合概念
到目前為止,我們已經(jīng)知道,maven可以輕松的管理項目的構(gòu)建。在第一篇Maven 學(xué)習(xí)中《Maven學(xué)習(xí)(一)————Maven技術(shù)概述》引言部分,我提到項目開發(fā)中,項目過大導(dǎo)致工程代碼龐大而出現(xiàn)的分工困難問題。
那么我們可以將項目拆分成多個 業(yè)務(wù)子模塊,這些模塊都是 maven 項目,然后通過彼此依賴的方式,建立聯(lián)系(注意,兩個項目 A 和 B 不能相互依賴,彼此依賴的意思是多個 maven 項目存在依賴關(guān)系,而兩個項目無法雙向依賴)。
但這依然存在一個問題,即需要在構(gòu)建的時候,分別去構(gòu)建每一個 maven 子工程,有沒有可以一鍵構(gòu)建所有子工程的方法?
maven 聚合就是為了解決這個問題。
maven 聚合的概念本身和 maven 繼承沒有什么交集,但是為了簡化操作,在實際開發(fā)過程中,人們往往更習(xí)慣于將 maven 的父工程作為一個總的聚合工程。
操作非常簡單,只需要在 pom 文件中加入<modules>標(biāo)簽項即可,如下圖所示:
這樣,只需要在 parent 項目上進(jìn)行 maven 操作即可。
在接下來的文章中,我會以 demo 的形式演示一些 maven 應(yīng)用于工程項目上的一些習(xí)慣性規(guī)則。包括一些在核心概念中并沒有介紹的內(nèi)容,也會在下面的實踐中逐一展開。不得不說,雖然maven 應(yīng)用起來非常簡單,但是要想真正弄懂,還是需要下一番功夫的。
?
總結(jié)
以上是生活随笔為你收集整理的Maven学习(三)————Maven核心概念(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lombok ——自动化方法生成器
- 下一篇: 计算机网络实验报告校园网,校园网规划与设