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