Maven筆記(更新中)

小路亞發表於2021-06-20

Maven

1、學習目標

  1. 會使用maven構建專案的命令

  2. 會使用maven構建java專案和java web專案

  3. 依賴管理--傳遞依賴 版本衝突處理

  4. 在web的單個工程中實現jsp+servlet整合。

  5. 分模組構建工程

  6. 會向私服上傳jar包。會從私服下載jar包

2、Maven介紹

2.1 maven是什麼

  • maven翻譯為“專家”,“內行”。

  • Maven是Apache下的一個純java開發的開源專案,它是一個專案管理工具,使用maven對java專案進行構建、依賴管理。當前使用Maven的專案在持續增長。

2.2 什麼是專案構建

  • 專案構建是一個專案從編寫原始碼到編譯、測試、執行、打包、部署、執行的過程

2.3 構建過程

2.3.1 傳統專案構建過程

  • 傳統的使用eclipse構建專案的過程如下:

2.3.2 maven專案構建過程

  • maven將專案構建的過程進行標準化,每個階段使用一個命令完成,下圖展示了構建過程的一些階段,後面章節詳 細介紹每個階段,這裡先大概瞭解下:

  • 清理 mvn clean

  • 編譯 mvn compile

  • 測試 mvn test

  • 報告 mvn site

  • 打包 mvn package

  • 部署 mvn deploy

2.4 jar依賴管理

2.4.1 傳統專案的依賴管理

  • 傳統的專案工程要管理所依賴的jar包完全靠人工進行,程式設計師從網上下載jar包新增到專案工程中,如下圖:程式 員手工將Spring、SpringMVC、Mybatis的jar新增到工程中的WEB-INF/lib目錄下。

    手工拷貝jar包新增到工程中的問題是:

  1. 沒有對jar包的版本統一管理,容易導致版本衝突。

  2. 從網上找jar包非常不方便,有些jar找不到。

  3. jar包新增到工程中導致工程過大。

2.4.2 maven專案的依賴管理

  • maven專案管理所依賴的jar包不需要手動向工程新增jar包,只需要在pom.xml(maven工程的配置檔案)新增jar

  • 包的座標,自動從maven倉庫中下載jar包、執行,如下圖:

    使用maven依賴管理新增jar的好處:

  1. 通過pom.xml檔案對jar包的版本進行統一管理,可避免版本衝突。

  2. maven團隊維護了一個非常全的maven倉庫,裡邊包括了當前使用的jar包,maven工程可以自動從maven倉庫

下載jar包,非常方便。

2.5 使用maven的好處

通過上邊介紹傳統專案和maven專案在專案構建及依賴管理方面的區域,maven有如下的好處:

  1. 一步構建

maven對專案構建的過程進行標準化,通過一個命令即可完成構建過程。

  1. 依賴管理

maven工程不用手動導jar包,通過在pom.xml中定義座標從maven倉庫自動下載,方便且不易出錯。

  1. maven的跨平臺,可在window、linux上使用。

  2. maven遵循規範開發有利於提高大型團隊的開發效率,降低專案的維護成本,大公司都會考慮使用maven來構

建專案。

3 maven安裝

3.1 下載安裝

下載地址

解壓

將maven解壓到一個不含有中文和空格的目錄中。

  • bin目錄 mvn.bat (以run方式執行專案)、 mvnDebug.bat(以debug方式執行專案 )

  • boot目錄 maven執行需要類載入器

  • conf目錄 settings.xml 整個maven工具核心配置檔案

  • lib目錄 maven執行依賴jar包

3.2 環境變數配置

  • maven環境配置,增加一個環境變數M2_HOME,值是maven的安裝路徑(C:\Program Files\apache-maven-3.5.0-bin\apache-maven-3.5.0

  • 修改path則是在path最後面新增;%M2_HOME%\bin

  • 具體如下配置:

      • 將 %M2_HOME%/bin 加入環境變數 path

      通過 mvn -v命令檢查 maven是否安裝成功,看到maven的版本為3.3.9及java版本為1.8即為安裝成功。


3.3 maven倉庫

3.3.1 倉庫有三種

  1. 本地倉庫

    • 本地倉庫的預設路徑為使用者.m2\repository

    • 我們可以在setting.xml中用<localRepository>D:\repository</localRepository>欄位修改本地倉庫的路徑

  2. 遠端倉庫

    • 如果專案依賴的庫在本地倉庫中沒有找到,maven就會去遠端倉庫找,maven有預設的遠端倉庫,就是他的中央倉庫

  3. 映象倉庫

    • 一般預設的遠端倉庫在國內可能連線不上,所以我們可以修改遠端倉庫的地址為國內的映象倉庫上

    • 修改maven根目錄下的conf資料夾中的setting.xml檔案,內容如下:

       <mirrors>
           <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里雲公共倉庫</name>
        <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
       </mirrors>

3.3.2 maven倉庫的作用

maven的工作需要從倉庫下載一些jar包,如下圖所示,本地的專案A、專案B等都會通過maven軟體從遠端倉庫

(可以理解為網際網路上的倉庫)下載jar包並存在本地倉庫,本地倉庫 就是本地資料夾,當第二次需要此jar包時則不再從遠端倉庫下載,因為本地倉庫已經存在了,可以將本地倉庫理解為快取,有了本地倉庫就不用每次從遠端倉 庫下載了。

下圖描述了maven中倉庫的型別:.

本地倉庫 :用來儲存從遠端倉庫或中央倉庫下載的外掛和jar包,專案使用一些外掛或jar包,優先從本地倉庫查詢。預設本地倉庫位置在meven根目錄下conf/settings.xml中,可看出: {user.dir}表示windows使用者目錄。

遠端倉庫:如果本地需要外掛或者jar包,本地倉庫沒有,預設去遠端倉庫下載。遠端倉庫可以在網際網路內也 可以在區域網內。

中央倉庫 :在maven軟體中內建一個遠端倉庫地址http://repo1.maven.org/maven2,它是中央倉庫,服務於整個網際網路,它是由Maven團隊自己維護,裡面儲存了非常全的jar包,它包含了世界上大部分流行的開源專案構件。

3.3.3 配置本地倉庫

在D盤目錄下建立repository資料夾:

 

在MAVE_HOME/conf/settings.xml檔案中配置本地倉庫位置:

3.3.4 全域性setting與使用者setting

  • maven倉庫地址、私服等配置資訊需要在setting.xml檔案中配置,分為全域性配置和使用者配置。

  • 全域性配置:在maven安裝目錄下的有 conf/setting.xml檔案,此setting.xml檔案用於maven的所有project專案,它作為maven的全域性配置。

  • 使用者配置:如需要個性配置則需要在使用者配置中設定,使用者配置的setting.xml檔案預設的位置在:目錄中{user.dir} 指windows 中的使用者目錄。

  • maven會先找使用者配置,如果找到則以使用者配置檔案為準,否則使用全域性配置檔案。

4、入門

4.1 約定目錄

使用maven建立的工程我們稱它為maven工程,maven工程具有一定的目錄規範,如下:

  • src/main/java —— 存放專案的.java檔案

    src/main/resources —— 存放專案資原始檔,如spring, hibernate配置檔案

    src/test/java —— 存放所有單元測試.java檔案,如JUnit測試類

    src/test/resources —— 測試資原始檔

  • pom.xml——maven專案核心配置檔案Project

4.2 建立專案

1.命令列建立普通java專案

 mvn archetype:generate -DgroupId=net.wanho -DartifactId=javademo -DarchetypeArtifactId=maven-archetype-quickstart

2.命令列建立javaWeb專案

 mvn archetype:generate -DgroupId=net.wanho -DartifactId=javawebdemo -DarchetypeArtifactId=maven-archetype-webapp

4.3 常用的maven命令

在cmd的狀態下測試

 mvn -v      檢視 maven 版本
  -compile 編譯
  -test 測試
  -package 打包
  -clean 刪除 target
  -install 安裝 jar 包到本地倉庫

4.3.1 compile

compile是maven工程的編譯命令,作用是將src/main/java下的檔案編譯為class檔案輸出到target目錄下。

cmd進入命令狀態,執行mvn compile,如下圖提示成功:

 

檢視 target目錄,class檔案已生成,編譯完成。

4.3.2 test

test是maven工程的測試命令,會執行src/test/java下的單元測試類。

cmd執行mvn test執行src/test/java下單元測試類,下圖為測試結果,執行1個測試用例,全部成功。

4.3.3 clean

clean是maven工程的清理命令,執行 clean會刪除target目錄的內容。

4.3.4 package

package是maven工程的打包命令,對於java工程執行package打成jar包,對於web工程打成war包。

4.3.5 install

install是maven工程的安裝命令,執行install將maven打成jar包或war包釋出到本地倉庫。

 

4.4 生命週期

4.4.1 三套生命週期

maven對專案構建過程分為三套相互獨立的生命週期,請注意這裡說的是“三套”,而且“相互獨立”,這三套生命周 期分別是:

  • Clean Lifecycle 在進行真正的構建之前進行一些清理工作。

  • Default Lifecycle 構建的核心部分,編譯,測試,打包,部署等等。

  • Site Lifecycle 生成專案報告,站點,釋出站點。

完整的專案構建過程包括: 清理、編譯、測試、打包、整合測試、驗證、部署

4.4.2 maven三套獨立的生命週期

 clean   清理專案
     1.pre-clean 執行清理前的工作
     2.clean 清理上一次構建生成的所有檔案
     3.post-clean 執行清理後的檔案
 
 default 構建專案(最核心)
    compile test package install
 
 site 生成專案站點
     1. pre-site 在生成專案站點前要完成的工作
     2. site 生成專案的站點文件
     3. post-site 在生成專案站點後要完成的工作
     4. site-deploy 釋出生成的站點到伺服器上

4.4.3 命令與生命週期的階段

每個maven命令對應生命週期的某個階段,例如:mvn clean 命令對應clean生命週期的clean階段, mvn test 命令對應default生命週期的test階段。

執行命令會將該命令在的在生命週期當中之前的階段自動執行,比如:執行mvn clean 命令會自動執行pre-clean 和clean兩個階段,mvn test命令會自動執行validate、compile、test等階段。

注意:執行某個生命週期的某個階段不會影響其它的生命週期!

如果要同時執行多個生命週期的階段可在命令列輸入多個命令,中間以空格隔開,例如:

clean package 該命令執行clean生命週期的clean階段和default生命週期的package階段。

4.5 maven的概念模型

Maven包含了一個專案物件模型 (Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle), 一個依賴管理系統(Dependency Management System),和用來執行定義在生命週期階段(phase)中外掛(plugin) 目標(goal)的邏輯。

下圖是maven的概念模型圖:

專案物件模型 (Project Object Model)

一個maven工程都有一個pom.xml檔案,通過pom.xml檔案定義專案的座標、專案依賴、專案資訊、外掛目標 等。

依賴管理系統(Dependency Management System)

通過maven的依賴管理對專案所依賴的jar 包進行統一管理。

比如:專案依賴junit4.9,通過在pom.xml中定義junit4.9的依賴即使用junit4.9,如下所示是junit4.9的依賴定義:

 <!‐‐ 依賴關係 ‐‐>
 <dependencies>
    <!‐‐ 此專案執行使用junit,所以此專案依賴junit ‐‐>
     <dependency>
        <!‐‐ junit的組織名稱 ‐‐>
         <groupId>junit</groupId>
        <!‐‐ junit的模組名稱 ‐‐>
         <artifactId>junit</artifactId>
        <!‐‐ junit版本 ‐‐>
         <version>4.9</version>
        <!‐‐ 依賴範圍:單元測試時使用junit ‐‐>
         <scope>test</scope>
     </dependency>
 </dependencies>

一個專案生命週期(Project Lifecycle)

使用maven完成專案的構建,專案構建包括:清理、編譯、測試、部署等過程,maven將這些過程規範為一個生命週期,如下所示是生命週期的各個階段:

maven通過執行一些簡單命令即可實現上邊生命週期的各個過程,比如執行mvn compile執行編譯、執行mvn clean執行清理。

一組標準集合

maven將整個專案管理過程定義一組標準,比如:通過maven構建工程有標準的目錄結構,有標準的生命週期階段、依賴管理有標準的座標定義等。

外掛(plugin)目標(goal)

maven 管理專案生命週期過程都是基於外掛完成的。

5、在Idea中Maven的配置與使用

5.1 配置

5.2 建立專案

5.2.1 新建一個java 專案

5.2.2 新建一個java_web專案名

5.2.2.1 建立web專案
  • 你要選擇maven然後按照下面圖片的指示操作就可以了---》最後點選next按鈕

 

點選Finish後專案開始建立

點選右下角檢視進去

  • 更新依賴

5.2.2.2 配置tomcat伺服器

 

5.2.2.3 使用tomcat外掛
  • pom.xml

 <build>
     <plugins>
       <plugin>
         <groupId>org.apache.tomcat.maven</groupId>
         <artifactId>tomcat7-maven-plugin</artifactId>
         <version>2.2</version>
         <configuration>
           <port>9090</port>
           <path>/</path>
           <uriEncoding>UTF-8</uriEncoding>
         </configuration>
       </plugin>
     </plugins>
   </build>
5.2.2.4 使用Idea的Smart外掛

相關文章