1. 初始Maven
1.1 介紹
Maven 是一款用于管理和構建Java項目的工具,是Apache旗下的一個開源項目 。
Apache 軟件基金會,成立于1999年7月,是目前世界上最大的最受歡迎的開源軟件基金會,也是一個專門為支持開源項目而生的非盈利性組織。
開源項目:https://www.apache.org/index.html#projects-list
那我們之前在JavaSE階段,沒有使用Maven,依然可以構建Java項目。 我們為什么現在還要學習Maven呢 ? 那接下來,我們就來聊聊Maven的作用。
1.2 Maven的作用
1.2.1 依賴管理
方便快捷的管理項目依賴的資源(jar包),避免版本沖突問題。
1). 使用maven前
我們項目中要想使用某一個jar包,就需要把這個jar包從官方網站下載下來,然后再導入到項目中。然后在這個項目中,就可以使用這個jar包了。
2). 使用maven后
當使用maven進行項目依賴(jar包)管理,則很方便的可以解決這個問題。 我們只需要在maven項目的pom.xml文件中,添加一段如下圖所示的配置即可實現。
在maven項目的配置文件中,加入上面這么一段配置信息之后,maven會自動的根據配置信息的描述,去下載對應的依賴。 然后在項目中,就可以直接使用了。
1.2.2 項目構建
Maven還提供了標準化的跨平臺的自動化構建方式。
如上圖所示我們開發了一套系統,代碼需要進行編譯、測試、打包、發布等過程,這些操作是所有項目中都需要做的,如果需要反復進行就顯得特別麻煩,而Maven提供了一套簡單的命令來完成項目構建。
通過Maven中的命令,就可以很方便的完成項目的編譯(compile)、測試(test)、打包(package)、發布(deploy) 等操作。
而且這些操作都是跨平臺的,也就是說無論你是Windows系統,還是Linux系統,還是Mac系統,這些命令都是支持的。
1.2.3 統一項目結構
Maven 還提供了標準、統一的項目結構 。
1). 未使用Maven
由于java的開發工具呢,有很多,除了大家熟悉的IDEA以外,還有像早期的Eclipse、MyEclipse。而不同的開發工具,創建出來的java項目的目錄結構是存在差異的,那這就會出現一個問題。
Eclipse創建的java項目,并不能直接導入IDEA中。 IDEA創建的java項目,也沒有辦法直接導入到Eclipse中。
2). 使用Maven
而如果我們使用了Maven這一款項目構建工具,它給我們提供了一套標準的java項目目錄。如下所示:
也就意味著,無論我們使用的是什么開發工具,只要是基于maven構建的java項目,最終的目錄結構都是相同的,如圖所示。 那這樣呢,我們使用Eclipse、MyEclipse、IDEA創建的maven項目,就可以在各個開發工具直接直接導入使用了,更加方便、快捷。
而在上面的maven項目的目錄結構中,main目錄下存放的是項目的源代碼,test目錄下存放的是項目的測試代碼。 而無論是在main還是在test下,都有兩個目錄,一個是java,用來存放源代碼文件;另一個是resources,用來存放配置文件。
最后呢,一句話總結一下什么是Maven。 Maven就是一款管理和構建java項目的工具。
Maven的內容,我們進行了分層的設計和講解,分為兩個部分:Maven核心和Maven進階。 那今天,我們先來講解Maven核心部分的內容,在Web開發的最后,我們再來講解Maven進階部分的內容。
2. Maven概述
2.1 Maven介紹
Apache Maven是一個項目管理和構建工具,它基于項目對象模型(Project Object Model , 簡稱: POM)的概念,通過一小段描述信息來管理項目的構建、報告和文檔。
官網:Welcome to Apache Maven – Maven
Maven的作用:
- 方便的依賴管理
- 統一的項目結構
- 標準的項目構建流程
2.2 Maven模型
- 項目對象模型 (Project Object Model)
- 依賴管理模型(Dependency)
- 構建生命周期/階段(Build lifecycle & phases)
1). 構建生命周期/階段(Build lifecycle & phases)
以上圖中紫色框起來的部分,就是用來完成標準化構建流程 。當我們需要編譯,Maven提供了一個編譯插件供我們使用;當我們需要打包,Maven就提供了一個打包插件供我們使用等。
2). 項目對象模型 (Project Object Model)
以上圖中紫色框起來的部分屬于項目對象模型,就是將我們自己的項目抽象成一個對象模型,有自己專屬的坐標,如下圖所示是一個Maven項目:
坐標,就是資源(jar包)的唯一標識,通過坐標可以定位到所需資源(jar包)位置。
坐標的組成部分:
- groupId: 組織名
- arfitactId: 模塊名
- Version: 版本號
3). 依賴管理模型(Dependency)
以上圖中紫色框起來的部分屬于依賴管理模型,是使用坐標來描述當前項目依賴哪些第三方jar包。
之前我們項目中需要jar包時,直接就把jar包復制到項目下的lib目錄,而現在我們只需要在pom.xml中配置依賴的配置文件即可。 而這個依賴對應的jar包其實就在我們本地電腦上的maven倉庫中。
如下圖,就是老師本地的maven倉庫中的jar文件:
2.3 Maven倉庫
倉庫:用于存儲資源,管理各種jar包
倉庫的本質就是一個目錄(文件夾),這個目錄被用來存儲開發中所有依賴(就是jar包)和插件
Maven倉庫分為:
- 本地倉庫:自己計算機上的一個目錄(用來存儲jar包)
- 中央倉庫:由Maven團隊維護的全球唯一的。倉庫地址:https://repo1.maven.org/maven2/
- 遠程倉庫(私服):一般由公司團隊搭建的私有倉庫
當項目中使用坐標引入對應依賴jar包后,
- 首先會查找本地倉庫中是否有對應的jar包
-
- 如果有,則在項目直接引用
- 如果沒有,則去中央倉庫中下載對應的jar包到本地倉庫
- 如果還可以搭建遠程倉庫(私服),將來jar包的查找順序則變為: 本地倉庫 --> 遠程倉庫--> 中央倉庫
2.4 Maven安裝
認識了Maven后,我們就要開始使用Maven了,那么首先我們要進行Maven的下載與安裝。
2.4.1 下載
- 下載地址:https://maven.apache.org/download.cgi
- 在提供的資料中,已經提供了下載好的安裝包。如下:
暫時無法在飛書文檔外展示此內容
2.4.2 安裝步驟
Maven安裝配置步驟:
- 解壓安裝
- 配置倉庫
- 配置阿里云私服
- 配置Maven環境變量
1). 解壓 apache-maven-3.9.4-bin.zip(解壓即安裝)
建議解壓到沒有中文、特殊字符的路徑下。如課程中解壓到 E:\develop
下。
解壓縮后的目錄結構如下:
- bin目錄 : 存放的是可執行命令。(mvn 命令重點關注)
- conf目錄 :存放Maven的配置文件。(settings.xml配置文件后期需要修改)
- lib目錄 :存放Maven依賴的jar包。(Maven也是使用java開發的,所以它也依賴其他的jar包)
2). 配置本地倉庫
- 在自己計算機上新一個目錄(本地倉庫,用來存儲jar包)
- 進入到conf目錄下修改
settings.xml
配置文件
-
- 使用超級記事本軟件,打開settings.xml文件,定位到53行
- 復制
<localRepository>
標簽,粘貼到注釋的外面(55行) - 復制之前新建的用來存儲jar包的路徑,替換掉
<localRepository>
標簽體內容
3). 配置阿里云私服
由于中央倉庫在國外,所以下載jar包速度可能比較慢,而阿里公司提供了一個遠程倉庫,里面基本也都有開源項目的jar包。
進入到conf目錄下修改settings.xml配置文件:
- 使用超級記事本軟件,打開settings.xml文件,定位到160行左右
- 在
<mirrors>
標簽下為其添加子標簽<mirror>
,內容如下:
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
注意配置的位置,在<mirrors> ... </mirrors>
中間添加配置。如下圖所示:
4). 配置環境變量
Maven環境變量的配置類似于JDK環境變量配置一樣
- 在系統變量處新建一個變量MAVEN_HOME。 MAVEN_HOME環境變量的值,設置為maven的解壓安裝目錄
- 在Path中進行配置。 PATH環境變量的值,設置為:%MAVEN_HOME%\bin
- 打開DOS命令提示符進行驗證,出現如圖所示表示安裝成功 。
命令為:mvn -v
5). 配置關聯的JDK版本(可選)
進入到conf目錄下修改settings.xml配置文件,在 <profiles> </profiles>
中增加如下配置:
<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>
3. IDEA集成Maven
我們要想在IDEA中使用Maven進行項目構建,就需要在IDEA中集成Maven,那么就需要在IDEA中配置與maven的關聯。
3.1 創建Maven項目
3.1.1 全局設置
- 進入IDEA的歡迎頁面
選擇 IDEA中 File => close project
=> Customize
=> All settings
- 打開 All settings , 選擇
Build,Execution,Deployment
=>Build Tools
=>Maven
- 配置工程的編譯版本為17
這里所設置的maven的環境信息,并未指定任何一個project,此時設置的信息就屬于全局配置信息。 以后,我們再創建project,默認就是使用我們全局配置的信息。
3.1.2 創建項目
- 創建一個空項目,命名為 web-project01
- 創建好項目之后,進入項目中,要設置JDK的版本號。選擇小齒輪,選擇
Project Structure
- 創建模塊,選擇Java語言,選擇Maven。 填寫模塊的基本信息
- 在maven項目中,創建HelloWorld類,并運行
Maven項目的目錄結構:
maven-project01
|--- src (源代碼目錄和測試代碼目錄)
|--- main (源代碼目錄)
|--- java (源代碼java文件目錄)
|--- resources (源代碼配置文件目錄)
|--- test (測試代碼目錄)
|--- java (測試代碼java目錄)
|--- resources (測試代碼配置文件目錄)
|--- target (編譯、打包生成文件存放目錄)
3.1.3 pom文件詳解
POM (Project Object Model) :指的是項目對象模型,用來描述當前的maven項目。
- 使用pom.xml文件來描述當前項目。 pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- POM模型版本 --><modelVersion>4.0.0</modelVersion><!-- 當前項目坐標 --><groupId>com.itheima</groupId><artifactId>maven-project01</artifactId><version>1.0-SNAPSHOT</version><!-- 項目的JDK版本及編碼 --><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>
pom文件詳解:
<project>
:pom文件的根標簽,表示當前maven項目<modelVersion>
:聲明項目描述遵循哪一個POM模型版本
-
- 雖然模型本身的版本很少改變,但它仍然是必不可少的。目前POM模型版本是4.0.0
- 坐標 :
-
<groupId>
<artifactId>
<version>
- 定位項目在本地倉庫中的位置,由以上三個標簽組成一個坐標
<maven.compiler.source>
:編譯JDK的版本<maven.compiler.target>
:運行JDK的版本<project.build.sourceEncoding>
: 設置項目的字符集
3.2 Maven坐標
什么是坐標?
- Maven中的坐標是資源的唯一標識 , 通過該坐標可以唯一定位資源位置
- 使用坐標來定義項目或引入項目中需要的依賴
Maven坐標主要組成:
- groupId:定義當前Maven項目隸屬組織名稱(通常是域名反寫,例如:com.itheima)
- artifactId:定義當前Maven項目名稱(通常是模塊名稱,例如 order-service、goods-service)
- version:定義當前項目版本號
-
- SNAPSHOT: 功能不穩定、尚處于開發中的版本,即快照版本
- RELEASE: 功能趨于穩定、當前更新停止,可以用于發行的版本
如下圖就是使用坐標表示一個項目:
注意:
- 上面所說的資源可以是插件、依賴、當前項目。
- 我們的項目如果被其他的項目依賴時,也是需要坐標來引入的。
3.3 導入Maven項目
在IDEA中導入Maven項目,有兩種方式。
- 方式一:
File
->Project Structure
->Modules
->Import Module
->選擇maven項目的pom.xml
。
- 方式二:
Maven面板
->+(Add Maven Projects)
->選擇maven項目的pom.xml
。