Maven 介紹

一、maven的用途
maven是一個項目構建和管理的工具,提供了幫助管理 構建、文檔、報告、依賴、scms、發佈、分發的方法。能夠方便的編譯代碼、進行依賴管理、管理二進制庫等等。
maven的好處在於能夠將項目過程規範化、自動化、高效化以及強大的可擴展性
利用maven自身及其插件還能夠得到代碼檢查報告、單元測試覆蓋率、實現持續集成等等。html

二、maven的核心概念介紹
2.1 Pom
pom是指project object Model。pom是一個xml,在maven2裏爲pom.xml。是maven工做的基礎,在執行task或者goal時,maven會去項目根目錄下讀取pom.xml得到須要的配置信息
pom文件中包含了項目的信息和maven build項目所需的配置信息,一般有項目信息(如版本、成員)、項目的依賴、插件和goal、build選項等等
pom是能夠繼承的,一般對於一個大型的項目或是多個module的狀況,子模塊的pom須要指定父模塊的pomjava

pom文件中節點含義以下:react

project pom文件的頂級元素
modelVersion 所使用的object model版本,爲了確保穩定的使用,這個元素是強制性的。除非maven開發者升級模板,不然不須要修改
groupId 是項目建立團體或組織的惟一標誌符,一般是域名倒寫,如groupId  org.apache.maven.plugins就是爲全部maven插件預留的
artifactId 是項目artifact惟一的基地址名
packaging artifact打包的方式,如jar、war、ear等等。默認爲jar。這個不只表示項目最終產生何種後綴的文件,也表示build過程使用什麼樣的lifecycle。
version artifact的版本,一般能看見爲相似0.0.1-SNAPSHOT,其中SNAPSHOT表示項目開發中,爲開發版本
name 表示項目的展示名,在maven生成的文檔中使用
url表示項目的地址,在maven生成的文檔中使用
description 表示項目的描述,在maven生成的文檔中使用
dependencies 表示依賴,在子節點dependencies中添加具體依賴的groupId artifactId和version
build 表示build配置
parent 表示父pom

其中groupId:artifactId:version惟一肯定了一個artifactandroid

2.2 Artifact
這個有點很差解釋,大體說就是一個項目將要產生的文件,能夠是jar文件,源文件,二進制文件,war文件,甚至是pom文件。每一個artifact都由groupId:artifactId:version組成的標識符惟一識別。須要被使用(依賴)的artifact都要放在倉庫(見Repository)中apache

 

2.3 Repositories
Repositories是用來存儲Artifact的。若是說咱們的項目產生的Artifact是一個個小工具,那麼Repositories就是一個倉庫,裏面有咱們本身建立的工具,也能夠儲存別人造的工具,咱們在項目中須要使用某種工具時,在pom中聲明dependency,編譯代碼時就會根據dependency去下載工具(Artifact),供本身使用。
對於本身的項目完成後能夠經過mvn install命令將項目放到倉庫(Repositories)中
倉庫分爲本地倉庫和遠程倉庫,遠程倉庫是指遠程服務器上用於存儲Artifact的倉庫,本地倉庫是指本機存儲Artifact的倉庫,對於windows機器本地倉庫地址爲系統用戶的.m2/repository下面。windows

2.4 Build Lifecycle
是指一個項目build的過程。maven的Build Lifecycle分爲三種,分別爲default(處理項目的部署)、clean(處理項目的清理)、site(處理項目的文檔生成)。他們都包含不一樣的lifecycle。
Build Lifecycle是由phases構成的,下面重點介紹default Build Lifecycle幾個重要的phase服務器

validate 驗證項目是否正確以及必須的信息是否可用
compile 編譯源代碼
test 測試編譯後的代碼,即執行單元測試代碼
package 打包編譯後的代碼,在target目錄下生成package文件
integration-test 處理package以便須要時能夠部署到集成測試環境
verify 檢驗package是否有效而且達到質量標準
install 安裝package到本地倉庫,方便本地其它項目使用
deploy 部署,拷貝最終的package到遠程倉庫和替他開發這或項目共享,在集成或發佈環境完成

以上的phase是有序的(注意實際兩個相鄰phase之間還有其餘phase被省略,完整phase見lifecycle),下面一個phase的執行必須在上一個phase完成後eclipse

若直接以某一個phase爲goal,將先執行完它以前的phase,如mvn install
將會先validate、compile、test、package、integration-test、verify最後再執行install phaseyii

 

2.5 Goal
goal表明一個特定任務jvm

mvn package表示打包的任務,經過上面的介紹咱們知道,這個任務的執行會先執行package phase以前的phase
mvn deploy表示部署的任務
mven clean install則表示先執行clean的phase(包含其餘子phase),再執行install的phase。

四、maven經常使用參數和命令
主要介紹maven經常使用參數和命令以及簡單故障排除

4.1 mvn經常使用參數
mvn -e 顯示詳細錯誤
mvn -U 強制更新snapshot類型的插件或依賴庫(不然maven一天只會更新一次snapshot依賴)
mvn -o 運行offline模式,不聯網更新依賴
mvn -N僅在當前項目模塊執行命令,關閉reactor
mvn -pl module_name在指定模塊上執行命令
mvn -ff 在遞歸執行命令過程當中,一旦發生錯誤就直接退出
mvn -Dxxx=yyy指定java全局屬性
mvn -Pxxx引用profile xxx

 

4.2 首先是2.4 Build Lifecycle中介紹的命令
mvn test-compile 編譯測試代碼
mvn test 運行程序中的單元測試

mvn compile 編譯項目
mvn package 打包,此時target目錄下會出現maven-quickstart-1.0-SNAPSHOT.jar文件,即爲打包後文件
mvn install 打包並安裝到本地倉庫,此時本機倉庫會新增maven-quickstart-1.0-SNAPSHOT.jar文件。
每一個phase均可以做爲goal,也能夠聯合,如以前介紹的mvn clean install

 

4.3 maven 日用三板斧
mvn archetype:generate 建立maven項目
mvn package 打包,上面已經介紹過了
mvn package -Prelease打包,並生成部署用的包,好比deploy/*.tgz
mvn install 打包並安裝到本地庫
mvn eclipse:eclipse 生成eclipse項目文件
mvn eclipse:clean 清除eclipse項目文件
mvn site 生成項目相關信息的網站

 

4.4 maven插件經常使用參數
mvn -Dwtpversion=2.0 指定maven版本
mvn -Dmaven.test.skip=true 若是命令包含了test phase,則忽略單元測試
mvn -DuserProp=filePath 指定用戶自定義配置文件位置
mvn -DdownloadSources=true -Declipse.addVersionToProjectName=true eclipse:eclipse 生成eclipse項目文件,嘗試從倉庫下載源代碼,而且生成的項目包含模塊版本(注意若是使用公用POM,上述的開關缺省已打開)

 

4.5 maven簡單故障排除

mvn -Dsurefire.useFile=false若是執行單元測試出錯,用該命令能夠在console輸出失敗的單元測試及相關信息
set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m 調大jvm內存和持久代,maven/jvm out of memory error
mvn -X maven log level設定爲debug在運行
mvndebug 運行jpda容許remote debug

 

http://www.trinea.cn/android/maven/

http://www.javashuo.com/article/p-nqmuviwz-dk.html

https://www.yiibai.com/maven/maven_project_documents.html

相關文章
相關標籤/搜索