天天看點

maven的核心概念

一、坐标

1、坐标的概念

(1)概念:

在平面幾何中坐标(x,y)可以辨別平面中唯一的一點。在maven中坐标就是為了定位一個唯一确定的jar包。

(2)Maven世界擁有大量建構,我們需要找一個用來唯一辨別一個建構的統一規範

擁有了統一規範,就可以把查找工作交給機器

2、坐标組成

(1)groupId:定義目前Maven組織名稱

(2)artifactId:定義實際項目名稱

(3)version:定義目前項目的目前版本

二、依賴管理

1、依賴範圍

(1)圖解:

maven的核心概念

其中依賴範圍scope 用來控制依賴和編譯,測試,運作的classpath的關系. 主要的是三種依賴關系如下:

(2)compile: 預設編譯依賴範圍。對于編譯,測試,運作三種classpath都有效

(3)test:測試依賴範圍。隻對于測試classpath有效

(4)provided:已提供依賴範圍。對于編譯,測試的classpath都有效,但對于運作無效。因為由容器已經提供,例如servlet-api

(5)runtime:運作時提供。例如:jdbc驅動

2、依賴傳遞

(1)A、B、C

B工程依賴A工程,C工程依賴B工程 =>那麼B工程是C工程的直接依賴,A工程是C工程的間接依賴

(2)分析第一解決依賴和第二直接依賴

maven的核心概念

(3)依賴範圍傳遞

maven的核心概念

左邊第一清單示第一直接依賴範圍

上面第一行表示第二直接依賴範圍

中間的交叉單元格表示傳遞性依賴範圍。

(4)總結:

a、當第二依賴的範圍是compile的時候,傳遞性依賴的範圍與第一直接依賴的範圍一緻。

b、當第二直接依賴的範圍是test的時候,依賴不會得以傳遞。

c、當第二依賴的範圍是provided的時候,隻傳遞第一直接依賴範圍也為provided的依賴,且傳遞性依賴的範圍同樣為 provided;

d、當第二直接依賴的範圍是runtime的時候,傳遞性依賴的範圍與第一直接依賴的範圍一緻,但compile例外,此時傳遞的依賴範圍為runtime;

3、依賴沖突

(1)概念:

在maven中存在兩種沖突方式:一種是跨pom檔案的沖突,一緻是同一個pom檔案中的沖突。

(2)跨pom檔案的沖突

a、

MavenFirst的pom檔案中依賴來junit的4.9版本,那邊MavenSecond和MavenThird中都是使用了4.9版本。

maven的核心概念

b、如果MavenSecond中重新依賴junit的4.8版本,那麼MavenSecond和MavenThird中都是使用了4.8本,這展現來依賴的就近使用原則。

maven的核心概念

(3)同一個pom檔案的沖突

maven的核心概念

4、可選依賴

(1)Optional标簽标示該依賴是否可選,預設是false。可以了解為,如果為true,則表示該依賴不會傳遞下去,如果為false,則會傳遞下去。

maven的核心概念

5、排除依賴

(1)Exclusions标簽可以排除依賴

三、生命周期

1、生命周期概述

(1)Maven有三個生命周期:clean生命周期、default生命周期、site生命周期

(2)生命周期可以了解為項目建構的步驟集合

(3)生命周期是由多個階段(Phase)組成。每個階段都是一個完整的功能,比如mvn clean中的clean就是一個階段

2、clean生命周期

(1)

pre-clean 執行一些需要在clean之前完成的工作

clean 移除所有上一次建構生成的檔案

post-clean 執行一些需要在clean之後立刻完成的工作

(2)mvn clean指令,等同于 mvn pre-clean clean。隻要執行後面的指令,那麼前面的指令都會執行,不需要再重新去輸入指令

(3)有Clean生命周期,在生命周期又有clean階段

3、default生命周期(重點)

(1)validate

generate-sources

process-sources

generate-resources

process-resources 複制并處理資源檔案,至目标目錄,準備打包。

compile 編譯項目的源代碼。

process-classes

generate-test-sources

process-test-sources

generate-test-resources

process-test-resources 複制并處理資源檔案,至目标測試目錄。

test-compile 編譯測試源代碼。

process-test-classes

test 使用合适的單元測試架構運作測試。這些測試代碼不會被打包或部署。

prepare-package

package 接受編譯好的代碼,打包成可釋出的格式,如 JAR 。

pre-integration-test

integration-test

post-integration-test

verify

install 将包安裝至本地倉庫,以讓其它項目依賴。

deploy 将最終的包複制到遠端的倉庫,以讓其它開發人員與項目共享

(2)在maven中,隻要在同一個生命周期,你執行後面的階段,那麼前面的階段也會被執行,而且不需要額外去輸入前面的階段,這樣大大減輕了程式員的工

4、site生命周期

(1)pre-site 執行一些需要在生成站點文檔之前完成的工作

(2)site 生成項目的站點文檔

(3)post-site 執行一些需要在生成站點文檔之後完成的工作,并且為部署做準備

(4)site-deploy 将生成的站點文檔部署到特定的伺服器上

四、插件

1、插件概述

(1)插件(plugin),每個插件都能實作一個階段的功能。Maven的核心是生命周期,但是生命周期相當于主要指定了maven指令執行的流程順序,而沒有真正實作流程的功能,功能是有插件來實作的

(2)比如:compile就是一個插件實作的功能

2、編譯插件

(1)圖解:

maven的核心概念

3、tomcat插件

(1)如果使用maven的tomcat插件的話,那麼本地則不需要安裝tomcat

(2)使用tomcat插件運作web工程:

a、預設輸入tomcat:run去使用tomcat插件來啟動web工程,但是預設的tomcat插件使用的tomcat版本是tomcat6

b、而目前主流的tomcat,是使用的tomcat7,需要手動配置tomcat插件

maven的核心概念

c、使用tomcat7來運作web工程,它的指令是:tomcat7:run

五、繼承

1、建立父工程

maven的核心概念

2、建立子工程

(1)建立子工程有兩種方式:一種是建立一個新的工程為子工程,另一種是修改老的工程為子工程

(2)圖解:

maven的核心概念

3、父工程統一依賴jar包

(1)在父工程中對jar包進行依賴,在子工程中都會繼承此依賴

maven的核心概念

4、父工程統一管理版本号

(1)dependencyManagement标簽管理的依賴,其實沒有真正依賴,它隻是管理依賴的版本

(2)子工程的pom檔案:

maven的核心概念

5、父工程抽取版本号

maven的核心概念

六、聚合

1、建立一個聚合工程

(1)在真實項目中,一個項目有表現層、業務層、持久層,對于業務層和持久層,它們可以在多個工程中被使用,是以一般會将業務層和持久單獨建立為java工程,為其他工程依賴

(2)圖解:

2、建立持久層

maven的核心概念

3、建立業務層

(1)和持久層的建立一樣

4、表現層

(1)

maven的核心概念

(2)

maven的核心概念

5、運作聚合工程

(1)聚合工程的pom檔案:

maven的核心概念