一、來 , 了解下 Maven ! ! !
-
Maven 是什么 ?
一個對 Maven 比較正式的定義 : Maven是 一個項目管理工具 , 它包含了一個項目對象模型(POM),一組標準集合 , 一個項目生命周期,一個依賴管理系統(tǒng)和用來運行定義在生命周期階段中插件目標的邏輯 .
-
Maven 用來解決什么問題 ?
1.主要是用來解決導入java類依賴的jar,編譯java項目主要問題 ;
2.可以解決jar之間的依賴和沖突;
3.jar 包管理,防止jar之間依賴起沖突 ;
4.Maven是基于項目對象模型,可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔的軟件項目管理工具。Maven能夠很方便的幫你管理項目報告,生成站點,管理jar文件,等等。例如:項目開發(fā)中第三方j(luò)ar引用的問題,開發(fā)過程中合作成員引用的jar版本可能不同,還有可能重復(fù)引用相同jar的不同版本,使用maven關(guān)聯(lián)jar就可以配置引用jar的版本,避免沖突。
既然這么多用處,他的優(yōu)勢在哪里下面就聊聊它的優(yōu)勢 :
Maven 優(yōu)勢一:相同的項目結(jié)構(gòu)
使用Maven管理的Java 項目都有著相同的項目結(jié)構(gòu)
有一個pom.xml 用于維護當前項目都用了那些jar包
所有的java代碼都放在 src/main/java
-
所有的測試代碼都放在src/test/javaimage-20200526171021307.png
Maven 優(yōu)勢二:統(tǒng)一維護jar包
比如說有3個Java 項目,這些項目都不是maven風格。那么這3個項目,就會各自維護一套jar包。 而其中有些jar包是相同的。
而maven風格的項目,首先把所有的jar包都放在"maven倉庫“ 里,然后哪個項目需要用到這個jar包,只需要給出jar包的名稱和版本號就行了。 這樣jar包就實現(xiàn)了共享如圖所示

二、讓我們進入 Maven 的使用 ! ! !
2.1.1 Maven 軟件的下載
為了使用 Maven 管理工具,我們首先要到官網(wǎng)去下載它的安裝軟件。通過百度搜索“Maven“如下:

點擊 Download 鏈接,就可以直接進入到 Maven 軟件的下載頁面:

2.1.2 Maven 軟件的安裝
Maven 下載后,將 Maven 解壓到一個沒有中文沒有空格的路徑下,比如 D:\software\maven 下面。
解壓后目錄結(jié)構(gòu)如下:
bin:存放了 maven 的命令,比如我們前面用到的 mvn tomcat:run
boot:存放了一些 maven 本身的引導程序,如類加載器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身運行所需的一些 jar 包
至此我們的 maven 軟件就可以使用了,前提是你的電腦上之前已經(jīng)安裝并配置好了 JDK。
2.1.3 JDK 的準備及統(tǒng)一
本次課程我們所使用工具軟件的統(tǒng)一,JDK 使用 JDK8版本
- JDK 環(huán)境:
2.1.4 Maven 及 JDK 配置
電腦上需安裝 java 環(huán)境,安裝 JDK1.7 + 版本 (將JAVA_HOME/bin 配置環(huán)境變量 path ),我們使用的是 JDK8 相關(guān)版本配置 MAVEN_HOME ,變量值就是你的 maven 安裝 的路徑(bin 目錄之前一級目錄)
上面配置了我們的 Maven 軟件,注意這個目錄就是之前你解壓 maven 的壓縮文件包在的的目錄,最好不要有中文和空格。
再次檢查 JDK 的安裝目錄,如下圖:

2.1.5 Maven 軟件版本測試
通過 mvn -v命令檢查 maven 是否安裝成功,看到 maven 的版本為 3.5.2 及 java 版本為 1.8 即為安裝成功。
找開 cmd 命令,輸入 mvn –v命令,如下圖:
我們發(fā)現(xiàn) maven 的版本,及 jdk 的版本符合要求,這樣我們的 maven 軟件安裝就成功了
三、Maven設(shè)置
1、本地倉庫
運行過 Maven 命令才會在你的用戶目錄生成一個 .m2 目錄,該目錄下有個目錄名 repository,這個就是所謂的本地倉庫,主要存放是一些下載的 jar 文件。
本地倉庫默認位置在用戶目錄/.m2/repository,本地倉庫不建議在系統(tǒng)盤,最佳實踐:
將 Maven 根目錄的 conf/settings.xml 拷貝到 .m2 中,作為個人 Maven 配置文件;
在 settings.xml 文件中 修改本地倉庫的位置。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd
<!-- 本地倉庫地址 -->
<localRepository>你本地倉庫的目錄位置</localRepository>
</settings>
2、配置中央倉庫鏡像
在有網(wǎng)情況下,官方中央倉庫服務(wù)器在國外,所以很大可能出現(xiàn)下載失敗的問題,所以我們配置一個中央倉庫的鏡像來降低下載失敗的概率。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd
<!-- 本地倉庫地址 -->
<localRepository>你本地倉庫的目錄位置</localRepository>
<mirrors>
<!-- 阿里倉庫鏡像 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
2.3 Maven 工程的認識
2.3.1 Maven 工程的目錄結(jié)構(gòu)

作為一個 maven 工程,它的 src 目錄和 pom.xml 是必備的。 進入 src 目錄后,我們發(fā)現(xiàn)它里面的目錄結(jié)構(gòu)如下:

src/main/java —— 存放項目的.java 文件
src/main/resources —— 存放項目資源文件,如 spring, hibernate 配置文件
src/test/java —— 存放所有單元測試.java 文件,如 JUnit 測試類
src/test/resources —— 測試資源文件
target —— 項目輸出位置,編譯后的 class 文件會輸出到此目錄
pom.xml——maven 項目核心配置文件
注意:如果是普通的 java 項目,那么就沒有 webapp 目錄。
2.3.2 Maven 工程的運行
進入 maven 工程目錄(當前目錄有 pom.xml 文件),運行 tomcat:run 命令。

2.3.3 問題處理 如果本地倉庫配置錯誤會報下邊的錯誤

分析:
maven 工程運行先從本地倉庫找 jar 包,本地倉庫沒有再從中央倉庫找,上邊提示 downloading…
表示 從中央倉庫下載 jar,由于本地沒有聯(lián)網(wǎng),報錯。
解決:
在 maven 安裝目錄的 conf/setting.xml 文件中配置本地倉庫,參考:“maven 倉庫/配置本地倉庫章節(jié)”。
四、 Maven 常用命令
我們可以在 cmd 中通過一系列的 maven 命令來對我們的 maven-helloworld 工程進行編譯、測試、運行、打包、安裝、部署。
4.1.1 compile
compile 是 maven 工程的編譯命令,作用是將 src/main/java 下的文件編譯為 class 文件輸出到 target
目錄下。
cmd 進入命令狀態(tài),執(zhí)行 mvn compile,如下圖提示成功:
查看 target 目錄,class 文件已生成,編譯完成。
4.1.2 test
test 是 maven 工程的測試命令 mvn test,會執(zhí)行 src/test/java 下的單元測試類。
cmd 執(zhí)行 mvn test 執(zhí)行 src/test/java 下單元測試類,下圖為測試結(jié)果,運行 1 個測試用例,全部成功。

4.1.3 clean
clean 是 maven 工程的清理命令,執(zhí)行 clean 會刪除 target 目錄及內(nèi)容。
4.1.4 package
package 是 maven 工程的打包命令,對于 java 工程執(zhí)行 package 打成 jar 包,對于 web 工程打成 war
包。
4.1.5 install
install 是 maven 工程的安裝命令,執(zhí)行 install 將 maven 打成 jar 包或 war 包發(fā)布到本地倉庫。
從運行結(jié)果中,可以看出:
當后面的命令執(zhí)行時,前面的操作過程也都會自動執(zhí)行,
4.1.6 Maven 指令的生命周期
maven 對項目構(gòu)建過程分為三套相互獨立的生命周期,請注意這里說的是“三套”,而且“相互獨立”,
這三套生命周期分別是:
Clean Lifecycle 在進行真正的構(gòu)建之前進行一些清理工作。
Default Lifecycle 構(gòu)建的核心部分,編譯,測試,打包,部署等等。
Site Lifecycle 生成項目報告,站點,發(fā)布站點。
4.1.7 maven 的概念模型
Maven 包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命周期(Project Lifecycle),一個依賴管理系統(tǒng)(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。
? 項目對象模型 (Project Object Model)
一個 maven 工程都有一個 pom.xml 文件,通過 pom.xml 文件定義項目的坐標、項目依賴、項目信息、插件目標等。
? 依賴管理系統(tǒng)(Dependency Management System)
通過 maven 的依賴管理對項目所依賴的 jar 包進行統(tǒng)一管理。
比如:項目依賴 junit4.9,通過在 pom.xml 中定義 junit4.9 的依賴即使用 junit4.9,如下所示是 junit4.9
的依賴定義:
<!-- 依賴關(guān)系 -->
<dependencies>
<!-- 此項目運行使用 junit,所以此項目依賴 junit -->
<dependency>
<!-- junit 的項目名稱 -->
<groupId>junit</groupId>
<!-- junit 的模塊名稱 -->
<artifactId>junit</artifactId>
<!-- junit 版本 -->
<version>4.9</version>
<!-- 依賴范圍:單元測試時使用 junit -->
<scope>test</scope>
</dependency>
? 一個項目生命周期(Project Lifecycle)
使用 maven 完成項目的構(gòu)建,項目構(gòu)建包括:清理、編譯、測試、部署等過程,maven 將這些
過程規(guī)范為一個生命周期,如下所示是生命周期的各階段:[圖片上傳中...(idea-2.jpg-b195a7-1590489078136-0)]

maven 通過執(zhí)行一些簡單命令即可實現(xiàn)上邊生命周期的各各過程,比如執(zhí)行 mvn compile 執(zhí)行編譯、執(zhí)行 mvn clean 執(zhí)行清理。
? 一組標準集合
maven 將整個項目管理過程定義一組標準,比如:通過 maven 構(gòu)建工程有標準的目錄結(jié)構(gòu),有
標準的生命周期階段、依賴管理有標準的坐標定義等。
? 插件(plugin)目標(goal)
maven 管理項目生命周期過程都是基于插件完成的。
五、****IDEA 中 Maven 的配置
配置安裝的 Maven,設(shè)置 setttings.xml 和本地倉庫。
看看啊看
compile:默認,適用于所有階段,會隨著項目一起發(fā)布,在編譯,測試,運行時都有效;
provided:編譯和測試階段使用;典型的如 servlet-api.jar,打包時不需要,容器來提供; servlet /lombok
runtime:測試和運行階段使用,用于接口和實現(xiàn)分離,典型的如 jdbc 具體驅(qū)動實現(xiàn); mysql
test:測試階段使用,不會隨項目發(fā)布,如 junit。
