Maven學習歸納(三)——依賴添加依賴排除與項目整合
一、Maven的坐標
1. 坐標的定義
數學意義上的坐標可以是平面上的(x,y)也可以是空間上的(x,y,z),都可以確定一個質點的位置和方向。
Maven中有很多構件,為了能夠自動化解析任何一個構件,需要將它們做成唯一標識,即依賴管理的基礎——坐標,通過坐標確定jar的位置
2. 為什麽需要坐標
在沒有坐標之前,當我們需要一些jar包的時候,總需要到各個網站上下載。這樣一來,就浪費了很多時間,提高了程序開發成本。
另一方面,下載沒有統一規範,導致版本不統一等,又嚴重提高了運維成本。
擁有了統一規範,就可以把查找工作交給機器。
3. 定義的規則
因為實現了統一管理,Maven定義了一組規則,讓機器基於預定的規則去自動實現下載jar包。
只要提供了正確的坐標,Maven就能找到對應的jar包
Maven坐標的元素包括:
groupId:組織的標識
artifactId:項目的名稱
version:項目的當前版本
packageing:項目的的打包發格式,分為jar pom war 三種
classifier:構建輸出附件
二、Maven的生命周期
Maven生命周期就是為了對所有的構建過程進行抽象和統一,包括項目清理,初始化,編譯,打包,測試,部署等幾乎所有構建步驟
1. 三個生命周期
clean: Clean Lifecycle在進行真正的構建之前進行一些清理工作。
default: Default Lifecycle構建核心部分,如編譯,測試,打包,部署等等。
site: Site Lifecycle生成項目報告,站點,發布站點。
2. 三個周期的關系
每個生命周期包含一些階段,這些階段是有順序的,並且後面的階段依賴於前面的階段,用戶和Maven最直接的交互方式就調用這些生命周期階段
較之於生命周期階段的前後依賴關系,三套生命周期本身是相互獨立的,用戶可以僅僅調用clean生命周期的某個階段,或者僅僅調用default生命周期的某個階段,而不會對其他生命周期產生任何影響。
3. clean周期解析
pre-clean 執行一些需要在clean之前完成的工作
clean 移除所有上一次構建生成的文件
post-clean 執行一些需要在clean之後立刻完成的工作
在一個生命周期中,運行某個階段的時候,它之前的所有階段都會被運行
也就是說,"mvn clean"等同於 mvn pre-clean clean ,
如果我們運行 mvn post-clean ,那麽 pre-clean,clean 都會被運行。
這是Maven很重要的一個規則,可以大大簡化命令行的輸入。
4. default周期解釋
validate 驗證項目是否正確和所有需要的相關資源是否可用,這包含對pom.xml文件樹的驗證
default 生命周期定義了真正構件時所需要執行的所有步驟,它是生命周期中最核心的部分,它包含的階段如下:
initialize 初始化構建
generate-sources 生成源碼
process-sources 處理源代碼
generate-resources 生成資源
process-resources 處理項目主資源文件。對src/main/resources目錄的內容進行變量替換等工作後,復制到項目輸出的主classpath目錄中。
compile 編譯項目的主源代碼
process-classes
generate-test-sources
process-test-sources 處理項目測試資源文件
generate-test-resources
process-test-resources 處理測試的資源文件
test-compile 編譯項目的測試代碼
process-test-classes
test 使用單元測試框架運行測試,測試代碼不會被打包或部署
prepare-package 做好打包的準備
package 接受編譯好的代碼,打包成可發布的格式
pre-integration-test 前集成測試
integration-test 集成測試
postintegration-test 後集成測試
verify 檢驗
install 將包安裝到Maven本地倉庫,供本地其他Maven項目使用
deploy 將最終的包復制到遠程倉庫,供其他開發人員和Maven項目使用
5. site周期解釋
site生命周期的目的是建立和發布項目站點,Maven能夠基於POM所包含的信息,自動生成一個友好的站點,方便團隊交流和發布項目信息。該生命周期包含如下階段:
pre-site 執行一些在生成項目站點之前需要完成的工作
site 生成項目站點文檔
post-site 執行一些在生成項目站點之後需要完成的工作
site-deploy 將生成的項目站點發布到服務器上
運行任何一個階段的時候,它前面的所有階段都會被運行,這也就是為什麽我們運行mvn install 的時候,代碼會被編譯,測試,打包。此外,Maven的插件機制是完全依賴Maven的生命周期的,因此理解生命周期至關重要。
三、Maven的依賴添加
例如:我想要完成文件上傳到功能,就需要用到Fileupload的包,需要如何做呢?
在maven的官網上搜索要下載的包,http://mvnrepository.com/
點擊進去之後,再復制下面這個框的內容
復制黏貼到pom.xml上面
結果如下:成功把jar包進去
仔細觀察,還發現此時還多了commons-io-2.2.jar???為什麽???這就涉及到了“依賴”
當A jar包需要用到B jar包中的類時,我們就說A對B有依賴。
如本例:commons-fileupload-1.3.3jar依賴於commons-io-2.2.jar。
當前工程會到本地倉庫中根據坐標查找它所依賴的jar包。
配置的基本形式時使用,dependency標簽指定目標jar包的坐標。
四、Maven的依賴排除
有時候為了確保程序正確,可以將有可能重復的間接依賴排除
例如,我不想要剛剛添加的commons-io-2.2.jar了
復制並黏貼到pom.xml上,註意要跟原來引出依賴的原包處於同一個<dependency></dependency>範圍
看到項目結構上已經顯示沒有commons-io-2.2.jar了
五、Maven的項目整合
如何把兩個maven項目整合在一個呢?
因為兩個項目不能相互溝通,必然需要,將一個放入倉庫中的
如上,我想將項目 HelloWorld2 依賴項目 HelloWorld ,就需要將被依賴的HelloWorld2放入倉庫install下
如下所示:
然後對HelloWrold的項目進行install下,把它放入倉庫
修改完pom.xml都要update一下,加入成功
測試下添加進來的項目是否可用
寫好後再test下代碼,執行成功
就先到此為止吧~ o(* ̄▽ ̄*)o
Maven學習歸納(三)——依賴添加依賴排除與項目整合