4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念
1 maven概念模型
2 maven的生命周期,項目構建過程
Maven生命周期就是為了對所有的構建過程進行抽象和統一
包括項目清理,初始化,編譯,打包,測試,部署等幾乎所有構建步驟
?
Maven有“三套”相互獨立的生命周期,而且相互獨立,這三套生命周期分別是:
| Maven三大生命周期 | |
| clean:清理項目的 | 在進行真正的構建之前進行一些清理工作。 |
| default:構建項目的 | 構建的核心部分,編譯,測試,打包,部署等等。 |
| site:生成項目站點的 | 生成項目報告,站點,發布站點 |
要特別注意的是:它們是相互獨立的,可以僅僅調用clean來清理工作目錄,僅僅調用site來生成站點。當然也可以直接運行mvn clean install site 運行著三套生命周期。
?
clean生命周期每套生命周期都由一組階段(Phase組成),我們平時在命令行輸入的命令總會對應于一個特定的階段。比如mvn clean,這個clean是Clean生命周期的一個階段。
| clean生命周期 | |
| pre-clean | 執行一些需要在clean之前完成的工作 |
| clean | 移除所有上一次構建生成的文件 |
| post-clean | 執行一些需要在clean之后立刻完成的工作 |
| 注意: mvn clean 中的clean就是上面的clean,在一個生命周期中,運行某個階段的時候,它之前的所有階段都會被運行,也就是說,mvn clean等同于mvn pre-clean clean,那么pre-clean就會被運行。這是Maven很重要的一個規則,可以大大簡化命令行的輸入。 | |
?
| site生命周期 | |
| pre-site | 執行需要生成站點文檔之前完成的工作 |
| site | 生成項目的站點文檔 |
| post-site | 執行一些需要生成站點文檔之后完成的工作,并且為部署做準備 |
| site-deploy | 將生成的站點文檔部署到特定的服務器上 |
| 注意: 這里經常用到的是site階段和site-deploy階段,用以生成和發布Maven站點,這可是Maven相當強大的功能,Manager比較喜歡,文檔及統計數據自動生成。 | |
?
Default生命周期是Maven生命周期中最重要的一個,絕大部分工作都發生在這個生命周期中。這里,只解釋一些比較重要和常用的階段:
| Default生命周期 | |
| 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 | 將最終的包賦值到遠程的倉庫,以讓它開人員與項目共享。 |
| 注意: 運行任何一個階段的時候,它前面的所有階段都會被運行,這也就是為什么我們運行mvn install 的時候,代碼會被編譯,測試,打包。此外,Maven的插件機制是完全依賴Maven的生命周期的,因此理解生命周期至關重要。 | |
?
3 Maven坐標
Maven坐標主要組成
| groupId :定義當前Maven項目隸屬項目(習慣用包名來做) | 例子:
|
| artifactid:定義實際項目中的一個模板(一般是主類名) | |
| version:定義當前項目的當前版本 | |
| packaging:定義該項目的打包方式(jar,war等方式) |
4 依賴管理(依賴范圍,依賴聲明)
| 依賴范圍(scope)
|
| 依賴聲明 <dependencies> ?????????????????? <dependency> ??????????????????????????? <groupId>junit</groupId> ??????????????????????????? <artifactId>junit</artifactId> ??????????????????????????? <version>4.10</version> ??????????????????????????? <scope>test</scope> ?????????????????? </dependency> </dependencies> 其中依賴范圍scope 用來控制依賴和編譯,測試,運行的classpath的關系.主要的是三種依賴關系如下: 1.?????? compile:默認編譯依賴范圍。對于編譯,測試,運行三種classpath都有效 2.?????? test:測試依賴范圍。只對于測試classpath有效 3.?????? provided:已提供依賴范圍。對于編譯,測試的classpath都有效,但對于運行無效。因此由容器已經提供,例如servlet_api 4.?????? runtime:運行時提供。例如:jdbc驅動 ? 傳遞性依賴: ? 見傳遞依賴圖 ? 傳遞性依賴影響范圍
傳遞性依賴原則: ? A-->B A-->C ? 1.路徑最近者優先 2.路徑相同,第一聲明者優先 ? 注意: 1.dependencyManagement中定義的依賴子module不會共享 2.dependencies中定義的依賴子module可以共享 ? 可選依賴不被傳遞 ? 依賴優化:mvn dependency:list |
5 倉庫管理,私服概念
| 何為Maven倉庫 A 用來統一存儲所有Maven共享構建的位置就是倉庫 Maven倉庫布局 根據Maven坐標定義每個構建在倉庫中唯一存儲路徑 大致為:groupId/artifactId/version/artifactId-version.packaging 倉庫的分類: 本地倉庫: ~/.m2/repository/ 每個用戶只有一個本地倉庫 遠程倉庫 中央倉庫:Maven默認的遠程倉庫 http://repo1.maven.org/maven2 私服:是一種特殊的遠程倉庫,它是架設在局域網內的倉庫
鏡像:用來替代中央倉庫,速度一般比中央倉庫塊。 |
?
總結
以上是生活随笔為你收集整理的4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3.将maven项目jar纳入maven
- 下一篇: Maven(一)Maven及插件安装