Maven 概述與使用


Maven 項目管理工具

1. Maven 簡介

a. Maven 是什麼?

  • Maven 翻譯爲"專家"、“內行”,是 Apache 下的一個純 Java 開發的開源項目。
  • 對 Maven 比較正式的定義:Maven 是一個項目管理工具,它包含了一個項目對象模型,一組標準集合,一個項目生命週期,一個依賴管理系統,和用來運行定義在生命週期階段中插件目標的工具。

b. Maven 能解決什麼問題?

  • 可以用更通俗的方式來說明。我們知道,項目開發不僅僅是寫寫代碼而已,期間會伴隨着各種必不可少的事情要做,下面列舉幾個例子:
  1. 我們需要引用各種 jar 包,尤其是比較大的工程,引用的 jar 包往往有幾十個乃至上百個,每用到一種 jar 包,都需要手動引入工程目錄,而且經常遇到各種讓人抓狂的 jar 包衝突,版本衝突
  2. 我們寫好的 java 文件,需要通過 javac 編譯成 class 文件才能交給 JVM 運行。這項工作可以由各種 集成開發工具 幫我們完成 Eclipse、IDEA 等都可以將代碼即時編譯。
  3. 世界上沒有不存在 bug 的代碼,因此寫完了代碼,我們還要寫一些單元測試,然後 逐一 運行來檢驗代碼質量。
  4. 再優雅的代碼也是要出來賣的。我們後面還需要把代碼與各種配置文件、資源整合到一起,進行 打包。如果是 web 項目,還需要將之發佈到服務器 。
  • 試想,如果現在有一種工具,可以把你從上面的繁瑣工作中解放出來,能幫你構建工程,管理 jar包,編譯代碼,還能幫你自動運行單元測試,打包,生成報表,甚至能幫你部署項目,生成 Web 站點,你會心動嗎?Maven 就可以解決上面所提到的這些問題。

c. Maven 的兩個核心功能(重點)

i. 依賴管理

  • 傳統的 WEB 工程中,我們必須將工程所依賴的 jar 包複製到工程中,導致了工程的變得很大。
  • Maven 的 WEB 工程中不直接將jar包導入到工程中,而是通過在 pom.xml 文件中添加所需jar包的座標。項目運行時,通過讀取座標到一個專門用於“存放jar包倉庫"(Maven倉庫)找到相應的jar包。
    在這裏插入圖片描述
  • 倉庫如何存放 jar 包?
    在這裏插入圖片描述

ii. 項目構建

  • 我們開發的項目,往往都要經歷編譯、測試、打包、安裝,部署等一系列過程。
  • 什麼是構建項目?
    指的是項目從編譯、測試、打包、安裝,部署整個過程都交給 ?Maven 進行管理,這個過程稱爲構建。
  • 一鍵構建
    指的是整個構建過程,使用 Maven 一個命令可以輕鬆完成整個工作。

2. Maven 安裝和使用

a. Maven 下載和安裝

  • 下載
    Maven 官網下載地址 :http://maven.apache.org/download.cgi
    Maven 3.3+ 必須要求 JDK 1.7+
  • 安裝
    Maven 使用 java 語言開發的,解壓即可運行
    注意:Maven 依賴 JAVA_HOME
  • 目錄
    bin:存放了 Maven 的命令,比如我們前面用到的 mvn tomcat7:run
    boot:存放了一些 Maven 本身的引導程序,如類加載器等
    conf:存放了 Maven 的一些配置文件,如 setting.xml 文件
    lib:存放了 Maven 本身運行所需的一些 jar 包
    在這裏插入圖片描述
  • 環境變量
    MAVEN_HOMEMaven 安裝目錄
    path%MAVEN_HOME%\bin
  • 配置完畢後檢查版本
    mvn --version
    在這裏插入圖片描述

b. Maven倉庫(重點)

i. Maven 倉庫的分類

  1. 本地倉庫
    項目通過 jar 座標,先從本地倉庫找對應 jar 包,如果找不到會從遠程倉庫(互聯網)去下載 jar 包,保存在本地倉庫(在程序員的電腦上),第二次不需要從遠程倉庫去下載。
  2. 遠程倉庫
    • 中央倉庫
      由專業團隊(Maven 團隊)統一維護。
      中央倉庫的地址:http://repo1.maven.org/maven2/
    • 私服
      架設在公司局域網內,提供給內部的人員使用。
    • 第三方倉庫
      中央倉庫只有一個,國內使用非常慢,我們可以更換爲:阿里雲鏡像。

在這裏插入圖片描述

ii. Maven 本地倉庫的配置

  1. 將 repository.zip 解壓到非中文及特殊符號目錄下
    (Maven 倉庫)
    在這裏插入圖片描述
  2. 修改 Maven 的安裝目錄 /conf/settings.xml 文件的標籤
    <localRepository>本地倉庫地址</localRepository>
    (指定自定義本地倉庫)
    在這裏插入圖片描述

iii. Maven 倉庫國內鏡像配置

  • 修改 Maven 根目錄下的 conf 文件夾中的 setting.xml 文件,在 mirrors 節點上,添加內容如下:
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

在這裏插入圖片描述

c. Maven 座標和依賴

  • 想要只用哪個 jar 包,通過座標方式進行依賴引入。
    在這裏插入圖片描述
    在這裏插入圖片描述

d. Maven 工程的結構(重點)

  • 傳統的 java 工程遇到的問題:
    在這裏插入圖片描述
* java項目
	java工程名(項目名)
		|-- src目錄
			|-- main目錄(主幹代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
			|-- test目錄(測試代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目錄(存放編譯後的class文件,沒有test目錄下的編譯文件)

* web項目(重點)
	web工程名(項目名)
		|-- src目錄
			|-- main目錄(主幹代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
				|-- webapp目錄(頁面資源)
					|-- WEB-INF
						|-- web.xml(web工程核心配置文件)
					|-- index.jsp
					|-- css、js、img..
			|-- test目錄(測試代碼)
				|-- java目錄(java代碼)
				|-- resources目錄(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目錄(存放編譯後的class文件,沒有test目錄下的編譯文件)

3. Maven 生命週期和插件(瞭解)

a. Maven 常用命令和插件

  • 可以在 cmd 中通過一系列的 Maven 命令,來對我們的工程進行編譯、測試、打包、安裝、部署。

i. clean

  • Maven 工程的清理命令,執行 clean 會刪除 target 目錄及內容(之前的 out 目錄)。
  • mvn clean
    在這裏插入圖片描述

ii. compile

  • Maven 工程的編譯命令,作用是將 src/main/.java 下的文件編譯爲 class 文件,並和 src/main 目錄下的配置文件一起輸出到 target/classes 目錄下。
  • mvn compile
    在這裏插入圖片描述

iii. test

  • Maven 工程的測試命令,作用是執行 src/test/java 下單元測試類,並編譯爲 class 文件。
  • mvn clean test 先清理再測試
    在這裏插入圖片描述
    在這裏插入圖片描述

iv. package

  • Maven 工程的打包命令,對於 java 工程執行 package 打成 jar 包,對於 web 工程打成 war 包。 會自動進行測試,測試成功就打包,不成功不打包。
  • mvn clean package 先清理再打包
    在這裏插入圖片描述

注意:爲什麼 maven_hello 是 war 包而不是 jar 包呢?
在這裏插入圖片描述

v. install

  • Maven 工程的安裝命令,執行 install 將 mave 工程打成 jar 包或 war 包,併發布到本地倉庫。也是先編譯主幹再測試,需要添加依賴。
  • mvn clean install 先清理再安裝
    在這裏插入圖片描述
    在這裏插入圖片描述

vi. deploy

  • Maven 工程部署命令,將 jar 或 war 包部署(上傳)到私服中。
  • Maven 高級介紹了這個命令。

b. 生命週期

  • Maven 對項目構建過程分爲 “三套相互獨立的” 生命週期,這三套生命週期分別是:
  1. Clean Lifecycle(清理生命週期)
    在進行真正的構建之前進行一些清理工作。
    命令:clean
  2. Default Lifecycle(默認生命週期)
    構建的核心部分,編譯,測試,打包,部署等等。
    命令:compile test package install deploy
  3. Site Lifecycle(站點生命週期)
    生成項目報告,站點,發佈站點。
    命令:site
  • 在同一個生命週期中的命令,執行後面的命令,前面的命令自動執行
    在這裏插入圖片描述

c. Maven 概念模型(瞭解)

在這裏插入圖片描述

4. IDEA 創建 Maven 工程(重點)

a. IDEA 配置本地 Maven 環境(全局)

在這裏插入圖片描述

  • 我們在 IDEA 創建 Maven 工程默認從互聯網在下載一個骨架(但是我們電腦沒有聯網,就會卡頓一段時間,再使用本地骨架),我們可以直接指定 IDEA 查找本地骨架,提升效率並指定編碼防止亂碼。
-DarchetypeCatalog=internal -Dfile.encoding=GB2312

在這裏插入圖片描述

  • 需要創建一個全新的工作空間(基於 Mave 結構),注意要遵守 IDEA 初始化工作空間規範。

b. IDEA 創建工程

i. Java 工程

在這裏插入圖片描述
在這裏插入圖片描述

  • 手動創建 test 測試配置文件目錄:
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 指定 Maven 環境的 JDK 版本和字符集:
<build>
    <plugins>
        <!-- 設置編譯版本爲1.8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

在這裏插入圖片描述

	<!--依賴管理-->
    <dependencies>
        <!--junit座標-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

在這裏插入圖片描述

ii. web 工程(重點)

在這裏插入圖片描述

  • IDEA 創建 web 工程,需要我們安裝一個插件:
    在這裏插入圖片描述
  • 安裝成功後,重啓 IDEA 工具
    在這裏插入圖片描述
    在這裏插入圖片描述

iii. 注意

  • 創建完 Maven 之後,如果文件夾不會變顏色,可以手動刷新:
    在這裏插入圖片描述

c. 發佈 web 工程

i. IDEA 使用外置 Tomcat 運行(重點)

  • 點擊 Add Configuration:
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 測試:
    在這裏插入圖片描述

ii. IDEA 使用 Maven 內置 Tomcat 插件(瞭解)

	<build>
        <plugins>
            <!-- 設置編譯版本爲1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

在這裏插入圖片描述

  • 雙擊啓動(推薦):
    在這裏插入圖片描述
  • 命令啓動(不推薦,取消會默認退回到之前的 Module):
    在這裏插入圖片描述

d. 依賴管理

  • 開發期間,jar 包都在倉庫;運行期間,Maven 自動把 jar 包放到了項目的 lib 目錄下。
  • 不考慮依賴範圍引起的問題:
    在這裏插入圖片描述
    在這裏插入圖片描述
  • clean package 之後,javax.servlet-api.jar 包消失了。
    在這裏插入圖片描述
依賴範圍 對於編譯 classpath 有效 對於測試 classpath 有效 對於運行時classpath 有效 例子
compile(默認) Y Y Y mybatis
test - Y - junit
provided Y Y - servlet-api
runtime - Y Y JDBC驅動
system Y Y - 本地,maven倉庫之外的庫
  • compile
    默認依賴範圍,作用域在編譯、測試、運行時都有效。
  • test
    作用域在測試時有效。編譯和運行時不需要,比如:Junit。
  • provided
    作用域在編譯、測試時有效。運行時不需要,比如: servlet api 被 tomcat 容器提供,不指定可能會因爲版本不兼容導致衝突。
  • runtime
    作用域在測試、運行時有效。編譯時不需要,比如:jdbc 的驅動包。
  • system
    system 範圍依賴與 provided 類似,jar 包在本地磁盤而不是 Maven 倉庫。相當於找到 WEB-INF/lib,自己導入 jar 包,一般是因爲在 Maven 倉庫(本地、官網)裏沒有該 jar 包,不過一般很少出現該情況。

5. 項目流程

在這裏插入圖片描述


原文鏈接:https://qwert.blog.csdn.net/article/details/106132879

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章