天天看點

Maven教程4:Maven核心概念

作者:孤傲蒼狼   

在平面幾何中坐标(x,y)可以辨別平面中唯一的一點。

groupId:組織辨別(包名)

artifactId:項目名稱

version:項目的目前版本

packaging:項目的打包方式,最為常見的jar和war兩種

樣例:

Maven教程4:Maven核心概念
Maven教程4:Maven核心概念

Maven世界擁有大量建構,我們需要找一個用來唯一辨別一個建構的統一規範。

擁有了統一規範,就可以把查找工作交給機器。

依賴配置主要包含如下元素:

<code>&lt;!--添加依賴配置--&gt;</code>

<code>&lt;dependencies&gt;</code>

<code>&lt;!--項目要使用到junit的jar包,是以在這裡添加junit的jar包的依賴--&gt;</code>

<code>&lt;dependency&gt;</code>

<code>&lt;groupId&gt;junit&lt;/groupId&gt;</code>

<code>&lt;artifactId&gt;junit&lt;/artifactId&gt;</code>

<code>&lt;version&gt;4.9&lt;/version&gt;</code>

<code>&lt;scope&gt;test&lt;/scope&gt;</code>

<code>&lt;/dependency&gt;</code>

<code>&lt;!--項目要使用到Hello的jar包,是以在這裡添加Hello的jar包的依賴--&gt;</code>

<code>&lt;groupId&gt;me.gacl.maven&lt;/groupId&gt;</code>

<code>&lt;artifactId&gt;Hello&lt;/artifactId&gt;</code>

<code>&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;</code>

<code>&lt;scope&gt;compile&lt;/scope&gt;</code>

<code>&lt;/dependencies&gt;</code>

依賴範圍scope用來控制依賴和編譯,測試,運作的classpath的關系. 主要的是三種依賴關系如下:1.compile:預設編譯依賴範圍。對于編譯,測試,運作三種classpath都有效 2.test:測試依賴範圍。隻對于測試classpath有效 3.provided:已提供依賴範圍。對于編譯,測試的classpath都有效,但對于運作無效。因為由容器已經提供,例如servlet-api 4.runtime:運作時提供。例如:jdbc驅動

MakeFriends.jar直接依賴于HelloFriends.jar,而HelloFriends.jar又直接依賴于Hello.jar,那麼MakeFriends.jar也依賴于Hello.jar,這就是傳遞性依賴,隻不過這種依賴是間接依賴,如下圖所示:

Maven教程4:Maven核心概念

用來統一存儲所有Maven共享建構的位置就是倉庫

根據Maven坐标定義每個建構在倉庫中唯一存儲路徑,大緻為:groupId/artifactId/version/artifactId-version.packaging

每個使用者隻有一個本地倉庫,預設是在~/.m2/repository/,~代表的是使用者目錄

1、中央倉庫:Maven預設的遠端倉庫,URL位址:http://search.maven.org/

Maven教程4:Maven核心概念

2、私服:是一種特殊的遠端倉庫,它是架設在區域網路内的倉庫

Maven教程4:Maven核心概念

Maven生命周期就是為了對所有的建構過程進行抽象和統一,包括項目清理,初始化,編譯,打包,測試,部署等幾乎所有建構步驟

Maven有三套互相獨立的生命周期,請注意這裡說的是"三套",而且"互相獨立",這三套生命周期分别是:

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

Default Lifecycle 建構的核心部分,編譯,測試,打包,部署等等。

Site Lifecycle 生成項目報告,站點,釋出站點。

再次強調一下它們是互相獨立的,你可以僅僅調用clean來清理工作目錄,僅僅調用site來生成站點。當然你也可以直接運作 mvn clean install site 運作所有這三套生命周期。clean生命周期每套生命周期都由一組階段(Phase)組成,我們平時在指令行輸入的指令總會對應于一個特定的階段。比如,運作mvn clean ,這個的clean是Clean生命周期的一個階段。有Clean生命周期,也有clean階段。Clean生命周期一共包含了三個階段:

pre-clean 執行一些需要在clean之前完成的工作

clean 移除所有上一次建構生成的檔案

post-clean 執行一些需要在clean之後立刻完成的工作

"mvn clean" 中的clean就是上面的clean,在一個生命周期中,運作某個階段的時候,它之前的所有階段都會被運作,也就是說,"mvn clean"等同于 mvn pre-clean clean ,如果我們運作 mvn post-clean ,那麼 pre-clean,clean 都會被運作。這是Maven很重要的一個規則,可以大大簡化指令行的輸入。Site生命周期pre-site 執行一些需要在生成站點文檔之前完成的工作

site 生成項目的站點文檔

post-site 執行一些需要在生成站點文檔之後完成的工作,并且為部署做準備

site-deploy 将生成的站點文檔部署到特定的伺服器上

這裡經常用到的是site階段和site-deploy階段,用以生成和釋出Maven站點,這可是Maven相當強大的功能,Manager比較喜歡,文檔及統計資料自動生成,很好看。Default生命周期Default生命周期是Maven生命周期中最重要的一個,絕大部分工作都發生在這個生命周期中。這裡,隻解釋一些比較重要和常用的階段:

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的生命周期的,是以了解生命周期至關重要。

Maven的核心僅僅定義了抽象的生命周期,具體的任務都是交由插件完成的。

每個插件都能實作多個功能,每個功能就是一個插件目标。

Maven的生命周期與插件目标互相綁定,以完成某個具體的建構任務,例如compile就是插件maven-compiler-plugin的一個插件目标。

END

Maven教程4:Maven核心概念