Maven的核心概念
Maven是一款服務於java平臺的自動化構建工具。
自動化構建工具還有:make->ant->maven->gradle
1.約定的目錄
2.POM Project Object Model pom.xml是核心配置檔案,與構建相關的一切都在裡面設定
3.座標 下面三個向量唯一定位一個Maven工程
groupId:公司或組織域名倒序+專案名
artifactId:模組名
version:版本號
Maven工程的座標與倉庫中路勁的關係:groupId + artifactId + version + jar名(groupId和artifictId中的點需要替換為斜槓,類似於java中包的寫法為 java.lang.String,但實際路勁寫法為java/lang/String)
4.依賴
<dependency> <groupId>com.study</groupId> <artifactId>xxx</artifactId> <scope>compile</scope> </dependency>
Maven解析依賴時會到本地倉庫去查詢依賴的jar包,對於我們自己開發的Maven工程,使用mvn install後就能進入倉庫。
依賴的範圍(在scope中設定)
[1]compiled (預設)
對主程式是否有效:有效
對測試程式是否有效:有效
是否參與打包:參與
[2]test
對主程式是否有效:無效
對測試程式是否有效:有效
是否參與打包:不參與
[3]provided
對主程式是否有效:有效
對測試程式是否有效:有效
是否參與打包:不參與
依賴的特性:
①依賴的傳遞性
[1]好處:可以傳遞的依賴不必在每個模組中重複申明,在“最下面”的工程中依賴一次即可
[2]注意:非compile範圍的依賴不能傳遞。所以在各個模組中,如果有需要就得重複申明依賴。
②依賴的排除
[1]需要設定依賴排除的場合
[2]依賴排除的設定方式(只對配置的工程及後面依賴該工程的生效)
③依賴的原則
[1]作用:解決模組工程之間jar包的衝突
[2]情景設定1:驗證最短路徑優選原則
[3]情景設定2:驗證最短路徑相同先宣告原則(dependecy標籤申明的順序)
④統一管理依賴的版本
[1]情景舉例
這裡對spring各個jar包的依賴版本都是4.0.0如果想統一升級為4.1.1。
[2]建議配置方式
i:使用properties標籤內使用自定義標籤統一申明版本號
<properties> <myVersion>4.1.1<myVersion> <properties>
ii:在需要統一版本的位置,使用${自定義標籤名}引用申明的版本號
<version>${myVersion}<version>
[3]其實properties標籤配合自定義標籤申明資料的配置並不是只能應用於宣告依賴的版本號,凡是需要統一宣告再引用的場合都可以使用。
5.倉庫
倉庫分類
[1]本地倉庫:為當前電腦上所有的Maven工程服務
[2]遠端倉庫
(1)私服:架設在當前區域網環境下,為當前區域網下所有Maven工程服務
(2)中央倉庫:架設在Internet上,為全世界所有Maven工程服務
(3)中央倉庫映象:架設在各個大洲,為中央倉庫分擔流量。提升使用者訪問速度。
倉庫中儲存的內容:Maven工程
[1]Maven自身所需要的外掛
[2]第三方框架或工具的jar包
[3]我們自己開發的Maven工程
6.生命週期/外掛/目標
①各個構建環節執行的順序:不能打亂順序,必須按既定的順序執行。
②Maven的核心程式中定義了抽象的生命週期,生命週期中的各個階段的具體任務由外掛完成。
③Maven核心程式為了更好的實現自動化構建,按照這一特點執行生命週期的各個階段:不論現在要執行生命週期中的哪個階段,都是從生命週期最初的位置開始執行。
7.聚合
[1]作用:一鍵安裝各個工程。
[2]配置方式:在一個“總的聚合工程”中配置各個參與聚合的模組
<!--配置聚合--> <modules> <!--指定各個子工程的相對路徑--> <module></module> <module></module> </modules>
[3]使用方式:在聚合工程上執行安裝
8.繼承
[1]問題:模組之前版本不一致(由於test範圍的依賴不能傳遞,所以必然會分散在各個模組工程中,很容易造成版本的不一致)
[2]需求:統一管理各個模組工程中對junit依賴的版本
[3]解決思路:將junit依賴統一提取到“父工程”中,在“子工程”中宣告依賴時不指定版本
[4]操作步驟:
①建立一個maven工程作為父工程。注意:打包的方式需為pom
<groupId>org.example</groupId> <artifactId>mavenStudy</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging>
②在子工程中宣告對父工程的引用
<!-- 子工程中宣告父工程--> <parent> <artifactId></artifactId> <groupId></groupId> <version></version> <!--以當前專案為基準的父工程pom.xml檔案的相對路徑--> <relativePath></relativePath> </parent>
③將子工程座標中與父工程座標中重複的內容刪掉
④在父工程中統一junit的依賴
<!--配置依賴的管理--> <dependencyManagement> <dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> <version></version> <scope></scope> </dependency> </dependencies> </dependencyManagement>
⑤在子工程中刪除junit依賴的版本號
[5]注意:配置繼承後,執行安裝命令需要先安裝父工程。
常用maven命令
執行與構建過程(編譯,測試,打包)相關的命令必須進入pom.xml所在位置執行
mvn clean:清理(打包好的程式放在生成的名為target的檔案中,清理即刪除檔案中打包好的程式)
mvn compile:編譯主程式
mvn test-compile:編譯測試程式
mvn test:執行測試
mvn package:打包
mvn install:安裝至本地倉庫
mvn site:生成站點
修改預設本地倉庫的位置:在conf/settings.xml中修改localRespository標籤