Maven
Maven是專門用于管理和構(gòu)建Java項目的工具,它的主要功能有:
-
提供了一套標(biāo)準(zhǔn)化的項目結(jié)構(gòu)
-
提供了一套標(biāo)準(zhǔn)化的構(gòu)建流程(編譯,測試,打包,發(fā)布……)
-
提供了一套依賴管理機(jī)制
標(biāo)準(zhǔn)化的項目結(jié)構(gòu):
項目結(jié)構(gòu)我們都知道,每一個開發(fā)工具(IDE)都有自己不同的項目結(jié)構(gòu),它們互相之間不通用。我再eclipse中創(chuàng)建的目錄,無法在idea中進(jìn)行使用,這就造成了很大的不方便,如下圖:前兩個是以后開發(fā)經(jīng)常使用的開發(fā)工具
而Maven提供了一套標(biāo)準(zhǔn)化的項目結(jié)構(gòu),所有的IDE使用Maven構(gòu)建的項目完全一樣,所以IDE創(chuàng)建的Maven項目可以通用。如下圖右邊就是Maven構(gòu)建的項目結(jié)構(gòu)。
標(biāo)準(zhǔn)化的構(gòu)建流程:
如上圖所示我們開發(fā)了一套系統(tǒng),代碼需要進(jìn)行編譯、測試、打包、發(fā)布,這些操作如果需要反復(fù)進(jìn)行就顯得特別麻煩,而Maven提供了一套簡單的命令來完成項目構(gòu)建。
依賴管理:
依賴管理其實就是管理你項目所依賴的第三方資源(jar包、插件)。如之前我們項目中需要使用JDBC和Druid的話,就需要去網(wǎng)上下載對應(yīng)的依賴包(當(dāng)前之前是老師已經(jīng)下載好提供給大家了),復(fù)制到項目中,還要將jar包加入工作環(huán)境這一系列的操作。如下圖所示
而Maven使用標(biāo)準(zhǔn)的 坐標(biāo) 配置來管理各種依賴,只需要簡單的配置就可以完成依賴管理。
如上圖右邊所示就是mysql驅(qū)動包的坐標(biāo),在項目中只需要寫這段配置,其他都不需要我們擔(dān)心,Maven都幫我們進(jìn)行操作了。
市面上有很多構(gòu)建工具,而Maven依舊還是主流構(gòu)建工具,如下圖是常用構(gòu)建工具的使用占比
1 Maven簡介
Apache Maven 是一個項目管理和構(gòu)建工具,它基于項目對象模型(POM)的概念,通過一小段描述信息來管理項目的構(gòu)建、報告和文檔。
官網(wǎng) :http://maven.apache.org/
通過上面的描述大家只需要知道Maven是一個工具即可。Apache 是一個開源組織,將來我們會學(xué)習(xí)很多Apache提供的項目。
1.1 Maven模型
- 項目對象模型 (Project Object Model)
- 依賴管理模型(Dependency)
- 插件(Plugin)
如上圖所示就是Maven的模型,而我們先看紫色框框起來的部分,他就是用來完成 標(biāo)準(zhǔn)化構(gòu)建流程
。如我們需要編譯,Maven提供了一個編譯插件供我們使用,我們需要打包,Maven就提供了一個打包插件提供我們使用等。
上圖中紫色框起來的部分,項目對象模型就是將我們自己抽象成一個對象模型,有自己專屬的坐標(biāo),如下圖所示是一個Maven項目:
依賴管理模型則是使用坐標(biāo)來描述當(dāng)前項目依賴哪兒些第三方j(luò)ar包,如下圖所示
上述Maven模型圖中還有一部分是倉庫。如何理解倉庫呢?
1.2 倉庫
大家想想這樣的場景,我們創(chuàng)建Maven項目,在項目中使用坐標(biāo)來指定項目的依賴,那么依賴的jar包到底存儲在什么地方呢?其實依賴jar包是存儲在我們的本地倉庫中。而項目運行時從本地倉庫中拿需要的依賴jar包。
倉庫分類:
-
本地倉庫:自己計算機(jī)上的一個目錄
-
中央倉庫:由Maven團(tuán)隊維護(hù)的全球唯一的倉庫
- 地址: https://repo1.maven.org/maven2/
-
遠(yuǎn)程倉庫(私服):一般由公司團(tuán)隊搭建的私有倉庫
今天我們只學(xué)習(xí)遠(yuǎn)程倉庫的使用,并不會搭建。
當(dāng)項目中使用坐標(biāo)引入對應(yīng)依賴jar包后,首先會查找本地倉庫中是否有對應(yīng)的jar包:
-
如果有,則在項目直接引用;
-
如果沒有,則去中央倉庫中下載對應(yīng)的jar包到本地倉庫。
如果還可以搭建遠(yuǎn)程倉庫,將來jar包的查找順序則變?yōu)椋?/p>
本地倉庫 --> 遠(yuǎn)程倉庫–> 中央倉庫
2 Maven安裝配置
-
解壓 apache-maven-3.6.1.rar 既安裝完成
建議解壓縮到?jīng)]有中文、特殊字符的路徑下。如課程中解壓縮到
D:\software
下。解壓縮后的目錄結(jié)構(gòu)如下:
- bin目錄 : 存放的是可執(zhí)行命令。mvn 命令重點關(guān)注。
- conf目錄 :存放Maven的配置文件。
settings.xml
配置文件后期需要修改。 - lib目錄 :存放Maven依賴的jar包。Maven也是使用java開發(fā)的,所以它也依賴其他的jar包。
-
配置環(huán)境變量 MAVEN_HOME 為安裝路徑的bin目錄
此電腦
右鍵 -->高級系統(tǒng)設(shè)置
-->高級
-->環(huán)境變量
在系統(tǒng)變量處新建一個變量
MAVEN_HOME
在
Path
中進(jìn)行配置打開命令提示符進(jìn)行驗證,出現(xiàn)如圖所示表示安裝成功
-
配置本地倉庫
修改 conf/settings.xml 中的 為一個指定目錄作為本地倉庫,用來存儲jar包。
-
配置阿里云私服
中央倉庫在國外,所以下載jar包速度可能比較慢,而阿里公司提供了一個遠(yuǎn)程倉庫,里面基本也都有開源項目的jar包。
修改 conf/settings.xml 中的 標(biāo)簽,為其添加如下子標(biāo)簽:
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
3 Maven基本使用
3.1 Maven 常用命令
compile :編譯
clean:清理
test:測試
package:打包
install:安裝
命令演示:
在 資料\代碼\maven-project
提供了一個使用Maven構(gòu)建的項目,項目結(jié)構(gòu)如下:
而我們使用上面命令需要在磁盤上進(jìn)入到項目的 pom.xml
目錄下,打開命令提示符
編譯命令演示:
compile :編譯
執(zhí)行上述命令可以看到:
- 從阿里云下載編譯需要的插件的jar包,在本地倉庫也能看到下載好的插件
- 在項目下會生成一個
target
目錄
同時在項目下會出現(xiàn)一個 target
目錄,編譯后的字節(jié)碼文件就放在該目錄下
清理命令演示:
mvn clean
執(zhí)行上述命令可以看到
- 從阿里云下載清理需要的插件jar包
- 刪除項目下的
target
目錄
打包命令演示:
mvn package
執(zhí)行上述命令可以看到:
- 從阿里云下載打包需要的插件jar包
- 在項目的
terget
目錄下有一個jar包(將當(dāng)前項目打成的jar包)
測試命令演示:
mvn test
該命令會執(zhí)行所有的測試代碼。執(zhí)行上述命令效果如下
安裝命令演示:
mvn install
該命令會將當(dāng)前項目打成jar包,并安裝到本地倉庫。執(zhí)行完上述命令后到本地倉庫查看結(jié)果如下:
3.2 Maven 生命周期
Maven 構(gòu)建項目生命周期描述的是一次構(gòu)建過程經(jīng)歷經(jīng)歷了多少個事件
Maven 對項目構(gòu)建的生命周期劃分為3套:
- clean :清理工作。
- default :核心工作,例如編譯,測試,打包,安裝等。
- site : 產(chǎn)生報告,發(fā)布站點等。這套聲明周期一般不會使用。
同一套生命周期內(nèi),執(zhí)行后邊的命令,前面的所有命令會自動執(zhí)行。例如默認(rèn)(default)生命周期如下:
當(dāng)我們執(zhí)行 install
(安裝)命令時,它會先執(zhí)行 compile
命令,再執(zhí)行 test
命令,再執(zhí)行 package
命令,最后執(zhí)行 install
命令。
當(dāng)我們執(zhí)行 package
(打包)命令時,它會先執(zhí)行 compile
命令,再執(zhí)行 test
命令,最后執(zhí)行 package
命令。
默認(rèn)的生命周期也有對應(yīng)的很多命令,其他的一般都不會使用,我們只關(guān)注常用的:
4 IDEA使用Maven
以后開發(fā)中我們肯定會在高級開發(fā)工具中使用Maven管理項目,而我們常用的高級開發(fā)工具是IDEA,所以接下來我們會講解Maven在IDEA中的使用。
4.1 IDEA配置Maven環(huán)境
我們需要先在IDEA中配置Maven環(huán)境:
-
選擇 IDEA中 File --> Settings
-
搜索 maven
-
設(shè)置 IDEA 使用本地安裝的 Maven,并修改配置文件路徑
4.2 Maven 坐標(biāo)詳解
什么是坐標(biāo)?
- Maven 中的坐標(biāo)是資源的唯一標(biāo)識
- 使用坐標(biāo)來定義項目或引入項目中需要的依賴
Maven 坐標(biāo)主要組成
- groupId:定義當(dāng)前Maven項目隸屬組織名稱(通常是域名反寫,例如:com.itheima)
- artifactId:定義當(dāng)前Maven項目名稱(通常是模塊名稱,例如 order-service、goods-service)
- version:定義當(dāng)前項目版本號
如下圖就是使用坐標(biāo)表示一個項目:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-P8NjzOix-1691677377623)(assets/image-20210726174718176.png)]
注意:
- 上面所說的資源可以是插件、依賴、當(dāng)前項目。
- 我們的項目如果被其他的項目依賴時,也是需要坐標(biāo)來引入的。
4.3 IDEA 創(chuàng)建 Maven項目
-
創(chuàng)建模塊,選擇Maven,點擊Next
-
填寫模塊名稱,坐標(biāo)信息,點擊finish,創(chuàng)建完成
創(chuàng)建好的項目目錄結(jié)構(gòu)如下:
-
編寫 HelloWorld,并運行
4.4 IDEA 導(dǎo)入 Maven項目
大家在學(xué)習(xí)時可能需要看老師的代碼,當(dāng)然也就需要將老師的代碼導(dǎo)入到自己的IDEA中。我們可以通過以下步驟進(jìn)行項目的導(dǎo)入:
-
選擇右側(cè)Maven面板,點擊 + 號
-
選中對應(yīng)項目的pom.xml文件,雙擊即可
-
如果沒有Maven面板,選擇
View --> Appearance --> Tool Window Bars
可以通過下圖所示進(jìn)行命令的操作:
配置 Maven-Helper 插件
-
選擇 IDEA中 File --> Settings
-
選擇 Plugins
-
搜索 Maven,選擇第一個 Maven Helper,點擊Install安裝,彈出面板中點擊Accept
-
重啟 IDEA
安裝完該插件后可以通過 選中項目右鍵進(jìn)行相關(guān)命令操作,如下圖所示:
5 依賴管理
5.1 使用坐標(biāo)引入jar包
使用坐標(biāo)引入jar包的步驟:
-
在項目的 pom.xml 中編寫 標(biāo)簽
-
在 標(biāo)簽中 使用 引入坐標(biāo)
-
定義坐標(biāo)的 groupId,artifactId,version
-
點擊刷新按鈕,使坐標(biāo)生效
注意:文章來源地址http://www.zghlxwxcb.cn/news/detail-646496.html
- 具體的坐標(biāo)我們可以到如下網(wǎng)站進(jìn)行搜索
- https://mvnrepository.com/
快捷方式導(dǎo)入jar包的坐標(biāo):
每次需要引入jar包,都去對應(yīng)的網(wǎng)站進(jìn)行搜索是比較麻煩的,接下來給大家介紹一種快捷引入坐標(biāo)的方式
-
在 pom.xml 中 按 alt + insert,選擇 Dependency
-
在彈出的面板中搜索對應(yīng)坐標(biāo),然后雙擊選中對應(yīng)坐標(biāo)
-
點擊刷新按鈕,使坐標(biāo)生效
自動導(dǎo)入設(shè)置:
上面每次操作都需要點擊刷新按鈕,讓引入的坐標(biāo)生效。當(dāng)然我們也可以通過設(shè)置讓其自動完成
-
選擇 IDEA中 File --> Settings
-
在彈出的面板中找到 Build Tools
-
選擇 Any changes,點擊 ok 即可生效
5.2 依賴范圍
通過設(shè)置坐標(biāo)的依賴范圍(scope),可以設(shè)置 對應(yīng)jar包的作用范圍:編譯環(huán)境、測試環(huán)境、運行環(huán)境。
如下圖所示給 junit
依賴通過 scope
標(biāo)簽指定依賴的作用范圍。 那么這個依賴就只能作用在測試環(huán)境,其他環(huán)境下不能使用。
那么 scope
都可以有哪些取值呢?文章來源:http://www.zghlxwxcb.cn/news/detail-646496.html
依賴范圍 | 編譯classpath | 測試classpath | 運行classpath | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | logback |
test | - | Y | - | Junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驅(qū)動 |
system | Y | Y | - | 存儲在本地的jar包 |
- compile :作用于編譯環(huán)境、測試環(huán)境、運行環(huán)境。
- test : 作用于測試環(huán)境。典型的就是Junit坐標(biāo),以后使用Junit時,都會將scope指定為該值
- provided :作用于編譯環(huán)境、測試環(huán)境。我們后面會學(xué)習(xí)
servlet-api
,在使用它時,必須將scope
設(shè)置為該值,不然運行時就會報錯 - runtime : 作用于測試環(huán)境、運行環(huán)境。jdbc驅(qū)動一般將
scope
設(shè)置為該值,當(dāng)然不設(shè)置也沒有任何問題
注意:
- 如果引入坐標(biāo)不指定
scope
標(biāo)簽時,默認(rèn)就是 compile 值。以后大部分jar包都是使用默認(rèn)值。
到了這里,關(guān)于Maven 基礎(chǔ)學(xué)習(xí)及使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!