1. 程式人生 > >Maven學習歸納(三)——依賴添加依賴排除與項目整合

Maven學習歸納(三)——依賴添加依賴排除與項目整合

源文件 bubuko mda 如何 命令行 運維 插件 程序 移除

一、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. 三個生命周期

cleanClean Lifecycle在進行真正的構建之前進行一些清理工作。

defaultDefault 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學習歸納(三)——依賴添加依賴排除與項目整合