一、坐标
1、坐标的概念
(1)概念:
在平面幾何中坐标(x,y)可以辨別平面中唯一的一點。在maven中坐标就是為了定位一個唯一确定的jar包。
(2)Maven世界擁有大量建構,我們需要找一個用來唯一辨別一個建構的統一規範
擁有了統一規範,就可以把查找工作交給機器
2、坐标組成
(1)groupId:定義目前Maven組織名稱
(2)artifactId:定義實際項目名稱
(3)version:定義目前項目的目前版本
二、依賴管理
1、依賴範圍
(1)圖解:
其中依賴範圍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)分析第一解決依賴和第二直接依賴
(3)依賴範圍傳遞
左邊第一清單示第一直接依賴範圍
上面第一行表示第二直接依賴範圍
中間的交叉單元格表示傳遞性依賴範圍。
(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版本。
b、如果MavenSecond中重新依賴junit的4.8版本,那麼MavenSecond和MavenThird中都是使用了4.8本,這展現來依賴的就近使用原則。
(3)同一個pom檔案的沖突
4、可選依賴
(1)Optional标簽标示該依賴是否可選,預設是false。可以了解為,如果為true,則表示該依賴不會傳遞下去,如果為false,則會傳遞下去。
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)圖解:
3、tomcat插件
(1)如果使用maven的tomcat插件的話,那麼本地則不需要安裝tomcat
(2)使用tomcat插件運作web工程:
a、預設輸入tomcat:run去使用tomcat插件來啟動web工程,但是預設的tomcat插件使用的tomcat版本是tomcat6
b、而目前主流的tomcat,是使用的tomcat7,需要手動配置tomcat插件
c、使用tomcat7來運作web工程,它的指令是:tomcat7:run
五、繼承
1、建立父工程
2、建立子工程
(1)建立子工程有兩種方式:一種是建立一個新的工程為子工程,另一種是修改老的工程為子工程
(2)圖解:
3、父工程統一依賴jar包
(1)在父工程中對jar包進行依賴,在子工程中都會繼承此依賴
4、父工程統一管理版本号
(1)dependencyManagement标簽管理的依賴,其實沒有真正依賴,它隻是管理依賴的版本
(2)子工程的pom檔案:
5、父工程抽取版本号
六、聚合
1、建立一個聚合工程
(1)在真實項目中,一個項目有表現層、業務層、持久層,對于業務層和持久層,它們可以在多個工程中被使用,是以一般會将業務層和持久單獨建立為java工程,為其他工程依賴
(2)圖解:
2、建立持久層
3、建立業務層
(1)和持久層的建立一樣
4、表現層
(1)
(2)
5、運作聚合工程
(1)聚合工程的pom檔案: