一.Maven簡介
Maven的產生主要是為了解決Java項目中的兩個問題:
1.依賴管理:
傳統 Java 項目在引入第三方庫時,需要手動下載 JAR 包并維護復雜的依賴關系。Maven 提供了統一的依賴管理機制,通過簡單的配置即可自動從倉庫下載并引入所需的依賴,同時還能解決版本沖突問題。
2.項目構建:
Java 項目的構建過程通常包括編譯源代碼(.java)為字節碼(.class)、打包成 JAR 文件等多個步驟。Maven 提供了標準的構建生命周期和插件系統,使得整個構建過程自動化、規范化,極大地提高了開發效率。
Maven倉庫的概念:
Maven的倉庫分為本地倉庫、私服倉庫、中央倉庫
本地倉庫就是PC上保留的jar文件
私服倉庫一般是公司內部的,可以上傳自主開發的jar文件到私服倉庫,便于日后開發
中央倉庫是Maven官方維護的。
二.Maven的核心配置
在maven的conf文件夾下面,有一個settings.xml文件
{user.home}
表示當前用戶的家目錄,我的用戶是admin,所以進入admin就可以查看到
我們在下面再添加一行,就可以切換保存的目錄了
另外一個需要配置的地方就是鏡像,由于中央倉庫是在國外的,所以有時候訪問會慢很多,我們可以配置國內鏡像
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>aliyunmaven</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>
接下來是配置Maven的jdk版本
<profile><id>jdk-17</id><activation><activeByDefault>true</activeByDefault><jdk>17</jdk></activation><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><maven.compiler.compilerVersion>17</maven.compiler.compilerVersion></properties>
</profile>
指定使用 Maven 構建出來的項目默認使用的 JDK 版本為 17。
三.在IDEA中配置Maven
選擇新建一個Maven項目
archetype里選擇快速開始構建
創建完后,下面這個就是maven項目的一個基本結構
然后我們還需要去配置一下Maven,因為IDEA里面的Maven一般是它自帶的,我們需要把我們自己的Maven給導入進來
這里選擇剛才修改的Maven配置文件
然后點OK即可
四.Maven的生命周期和插件
validate是用來驗證pom.xml寫的是否正確,執行一下,顯示成功了
但是如果我注釋掉一行呢
就會出現報錯,說我們缺少了groupid
compile進行編譯,生成字節碼文件
test會把項目中的test用例都給執行一遍
package把項目打包成jar或者war文件(還會先執行compile和test)
verify檢查生成的jar包是否正確,是否符合標準
install把生成的jar包導入到本地倉庫,導入maven
deploy把生成的jar包導入私服倉庫
五.Maven的坐標
1. <groupID> 一般是公司或組織的唯一標識
2. <artifactID> 一般是項目的唯一標識
3.<version> 版本號
六.依賴管理
6.1 依賴范圍
除了上面說到的3個依賴標簽,還有一個<scope>標簽
它用來知道依賴的范圍
一般來說有compile,是編譯和運行時需要的,默認是這個,可以省略不寫
provided 編譯時需要,運行時不需要
runtime 運行時需要,編譯時不需要
test 只是在測試的時候需要,不會被打包到jar文件中
system從本地倉庫查找,需要加上systemPath帶上路徑
<scope>system</scope><systemPath>${basedir}/lib/junit-3.8.2.jar</systemPath>
6.2 依賴沖突
比如我們在項目中添加了兩個不同的依賴,他們又依賴了不同版本的同一個jar包的話,就會出現依賴沖突,到底應該使用哪一個jar包
有兩個原則:
1.路徑最短
2.pom.xml優先使用最先聲明的
七.父子工程
使用情境:
在實際開發中,會把一個大項目拆分成多個小項目,比方說用戶管理,商品管理等等,但是如果每一個模塊都需要重新配置一遍依賴就會很麻煩。
但是我們觀察發現,像spring,mybatis幾乎每個模塊都會用到。我們就可以通過父子工程來管理這些依賴
我們先新建一個maven-parent
把這里改成pom,表示最后不是生成jar文件,而是用來管理
然后把這個項目的SRC文件也給刪掉,在這里用不到
隨后右鍵maven-parent選擇新建一個模塊
可以看到這里child-a的pom.xml多了一個parent標簽
而父工程的pom.xml多了modules模塊