Maven入門簡介

2020-08-09 14:26:30

什麼是Maven?

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information
是一個軟體(特別是Java軟體)專案管理及自動構建工具,由Apache軟體基金會所提供。基於專案物件模型(縮寫:POM)概念,Maven利用一箇中央資訊片斷能管理一個專案的構建、報告和文件等步驟

爲什麼要用Maven?

1.簡化構建過程

Maven 確實遮蔽了很多細節,它已經大大簡化了開發人員的工作

2.提供統一的構建系統

Maven 使用專案物件模型(POM)和一組所有專案共用的外掛來構建專案,從而提供統一的構建系統。開發人員使用 Maven 構建專案的話,後期維護專案會節省大量時間

3.提供優質的專案資訊

Maven 提供了大量有用的專案資訊,這些資訊部分來自您的POM,部分來自專案源

4.提供最佳實踐開發指南

Maven 會彙總當前最佳開發實踐的原則,並通過 Maven 影響其他專案

5.允許透明遷移到新功能

Maven 爲 Maven 用戶端提供了一種安裝更新的簡單方法,開發人員可以簡單便捷的利用 Maven 的最新特性

Maven的設定

首先我們要下載Maven,這裏附上maven下載地址Maven下載地址
下載之後當然就是Maven的設定了,接下來就是解壓,之後在電腦的環境變數中設定如下:
新建:M2_HOME 變數爲:解壓Maven資料夾的根目錄
然後再Path環境屬性中新增:bin: %M2_HOME%\bin;
在这里插入图片描述
在这里插入图片描述
設定以後在cmd中執行 mvn -v 測試是否成功
在这里插入图片描述
當然,安裝後的中央倉庫的地址爲外網的,下載速度相對較慢,可以通過組態檔修改私服倉庫爲國內
即修改:apache-maven-xxx\conf目錄下的settings檔案
新增本地倉庫:<localRepository>D:\UserData\repo</localRepository>
中間的資料夾可以自己指定
指定私服倉庫

<mirrors>
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>        
</mirror>
</mirrors>

目錄結構


└─src                      原始碼
    ├─main                 主要
    │  ├─java              java原始碼
    │  │  └─com            
    │  │      └─woniuxy
    │  │          └─build  包名
    │  └─resources         資源: 組態檔
    └─test                 測試相關
        └─java
            └─com
                └─woniuxy
                    └─build

生命週期

maven對構建(build)的過程進行了抽象和定義,這個過程被稱爲構建的生命週期(lifecycle),生命週期(lifecycle)由多個階段(phase)組成,每個階段(phase)會掛接一到多個goal,goal是maven裡定義任務的最小單元,相當於ant裡的target,可以理解maven爲一個外掛的容器,每個外掛系結到某個goal執行

預設生命週期:校驗-初始化-編譯-測試-打包-整合測試-安裝-部署
validate-initialize-compile-test-package-integrationTest-install-deploy
在这里插入图片描述

Maven座標

Maven座標主要用來指明其依賴範圍,主要包括一下幾種

  • compile:編譯時依賴在所有階段都可獲得,這是預設值
  • provided: 提供的依賴範圍用來編譯應用程式,但無需部署。若你用到jdk或者應用伺服器提供的JAR,則使用此範圍,servlet APIs就屬於這個依賴範圍。測試時,此依賴範圍也加入到classpath
  • runtime:執行依賴範圍在編譯階段是不需要的,只有在執行時需要,比如JDBC驅動程式
  • test:測試範圍依賴,僅在編譯和執行單元測試時需要
  • system 本地依賴,不建議使用
    在这里插入图片描述

依賴傳遞

只有編譯時和執行時依賴是傳遞的
其中主要包括兩個原則

  • 最短路徑原則:
    A->B->C(0.2)
    A->C(0.1)
    此時的依賴爲:C(0.1)
  • 優先宣告原則:
    A->B->C(0.2)
    A->D->C(0.1)
    此時的依賴爲:C(0.2)

倉庫

本地倉庫(local)->私服映象(aliyun)->中央倉庫central

常用命令

  • alias mvni=‘mvn -T 1C clean install -Dmaven.test.skip=true’
  • alias mvnp=‘mvn -T 1C clean package -Dmaven.test.skip=true’
  • alias mvnv=‘mvn versions:set -DgenerateBackupPoms=false’
  • alias mvnd=‘mvn -T 1C clean deploy -Dmaven.test.skip=true’
  • alias mvndd=‘mvn -T 1C clean deploy -P dev -Dmaven.test.skip=true’
  • alias mvndo=‘mvn -T 1C clean deploy -P online -Dmaven.test.skip=true’
  • alias mvnc=‘mvn -T 1C clean eclipse:clean idea:clean’

給pom.xml新增Servlet依賴

<!--▽Servlet規範相關▽-->
<!-- servlet API支援 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
<!-- jstl支援 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.1.2</version>
    <type>jar</type>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
    <type>jar</type>
</dependency>
<!--△Servlet規範相關△-->