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檔案,等等。
└─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工程服務
Attention:執行所有的maven命令一定要進入pro.xml檔案所在的目錄