Maven 快速入門

2020-08-09 10:47:08

定義

Maven是一個專案自動化構建管理工具,它包含了一個專案物件模型 (Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。Maven這個單詞來自於意第緒語(猶太語),意爲知識的積累,最初在Jakata Turbine專案中用來簡化構建過程。當時有一些專案(有各自Ant build檔案),僅有細微的差別,而JAR檔案都由CVS來維護。於是希望有一種標準化的方式構建專案,一個清晰的方式定義專案的組成,一個容易的方式發佈專案的資訊,以及一種簡單的方式在多個專案中共用JARs。當你使用Maven的時候,你用一個明確定義的專案物件模型來描述你的專案,然後Maven可以應用橫切的邏輯,這些邏輯來自一組共用的(或者自定義的)外掛。

爲什麼使用

由於Maven的便捷使用方式, 所以在業界受到廣泛應用,藉助於Maven就可以將一個專案拆分爲多個工程,並且建立多個專案之間的關係。可以將jar包僅僅儲存在「倉庫」中,有需要使用的工程,「參照」這個檔案,並不需要重複複製,而且也不用考慮jar包的來源, 所有知名框架或第三方工具jar包已經按照統一規範放在了Maven的中央倉庫中。一個jar包依賴的其他jar包Maven會自動將被依賴的jar包匯入進來。Maven 有一個生命週期,當你執行 mvn install 的時候被呼叫。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命週期旅途中的一個影響就是,Maven 執行了許多預設的外掛目標,這些目標完成了像編譯和建立一個 JAR 檔案這樣的工作。此外,Maven能夠很方便的幫你管理專案報告,生成站點,管理JAR檔案,等等。

maven目錄結構約定

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

生命週期

預設生命週期:校驗-初始化-編譯-測試-打包-整合測試-安裝-部署

validate-initialize-compile-test-package-integrationTest-install-deploy

mvn compile

mvn test

mvn package

座標

使用下面 下麪的三個向量在倉庫中唯一定位一個Maven工程
1)groupId 公司的域名反寫 com.woniuxy.cq
2)artifactId 專案名 rocket
3)version 版本 SNAPSHOT(快照版本) rc RELEASE GA milestone

依賴

(1)依賴範圍
compile 預設,對於編譯,測試,執行三個狀態都有效
test 顧名思義,只針對執行test程式碼
provided 對於編譯和測試時有效,但執行時無效,典型的時servlet-api,執行時這個由容器來提供
runtime 對測試和執行時有效,但編譯時無效
system 與provided的範圍一樣,但system必須顯示的指定依賴檔案,通過來進行指定,是與本機系結的,所以基本很少用到
表格顯示如下:

依賴範圍**(scope)** 編譯時依賴 測試時依賴 執行時依賴 是否打入包 例子
compile Y Y Y Y SLF4J
provided Y Y Y N SERVLET-API
test N Y N N JUNIT
runtime N Y Y Y MYSQL JDBC DRIVER
system Y Y Y Y 有nexus後,不用system

(2)依賴傳遞
只有編譯時和執行時依賴是傳遞的
A->B->C(0.2)
A->C(0.1)
最短路徑原則:C(0.1)誰離得最近就使用誰的依賴jar包
A->B->C(0.2)
A->D->C(0.1)
優先宣告原則:C(0.2)看pom檔案中依賴的兩個工程誰在前面就是用哪個版本
(3)依賴排除
在寫pom的時候,我們寫的一個依賴往往會依賴於其他的包,而這些包可能是過時的不安全的,因此需要排除並重新參照安全的版本,先在依賴這個專案的pom中去除想排除的依賴,再新增指定版本的依賴。

倉庫

倉庫的分類:本地倉庫(local)->私服映象(aliyun)->中央倉庫central
(1)本地倉庫:當前電腦上部署的倉庫專案,爲當前電腦上所有的Maven工程服務
(2)私服:搭建在區域網的環境中,爲區域網範圍內的所有Maven工程服務

在这里插入图片描述

(3)中央倉庫:架設在Internet上,爲全世界所有的maven工程服務

常用命令

  1. mvn compile 將需測試原始碼編譯到路徑。一般來說,是編譯/src/test/java目錄下的java檔案至目標輸出的測試classpath目錄中。
  2. mvn clean 清理上一次build專案生成的檔案。
  3. mvn test 使用合適的單元測試框架執行測試,這些測試程式碼不會被打包或部署。
  4. mvn package 接受編譯好的程式碼,打包成可發佈的格式,如 JAR 、WAR。
  5. mvn install 將包安裝到本地倉庫,給其他本地參照提供依賴。

Attention:執行所有的maven命令一定要進入pro.xml檔案所在的目錄